js数组概念
典型的数组
- 元素的数据类型相同
- 使用连续的内存存储
- 通过数字下标获取元素
JS的数组
- 内存不一定连续
- 不能通过数字下标,而是字符串下标,这意味着数组可以有任何key
比如:
let arr = [1,2,3]
arr['xxx'] = 20
数组的创建
let arr = [1,2,3]
let arr = new Array(1,2,3)
let arr = new Array(1)
let arr = '1,2,3'.split(',')
let arr = '123'.split('')
Array.from('123')
let divList = document.querySelectorAll('div')
* 伪数组的原型链中并没有数组的原型,是啥意思内,就是没有__proto__属性,也就没有那些对数组操作的api。
arr1.concat(arr2)
arr.slice(1)
arr.slice(0)
* JS只提供浅拷贝
数组元素的删除
arr.shift()
arr.pop()
arr.splice(index,1)
arr.splice(index,1,'xxx')
arr.splice(index,1,'xxx','yyy')
数组元素的查看
for(let i = 0; i < arr.length; i++){
console.log('${i}: ${arr[i]}')
}
arr.forEach(function(item, index){
console.log('${index}: ${item}')
})
arr[index]
arr.indexOf(item)
arr.find(item => item % 2 ===0)
arr.findIndex(item => item % 2 ===0)
数组元素的增加
arr.push(newItem)
arr.unshift(newItem)
arr.reverse();
arr.sort((a,b) => a-b)
数组元素的变换
* map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
const array1 = [1, 4, 9, 16];
const map1 = array1.map(x => x * 2);
console.log(map1);
* filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
* reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
console.log(array1.reduce(reducer));
console.log(array1.reduce(reducer, 5));
作业
let arr = [0,1,2,2,3,3,3,4,4,4,4,6];
let arr2 = arr.map(x => {
let newItem;
switch(x){
case 0 :
newItem = '周日';
break;
case 1 :
newItem = '周一';
break;
case 2 :
newItem = '周二';
break;
case 3 :
newItem = '周三';
break;
case 4 :
newItem = '周四';
break;
case 6 :
newItem = '周六';
break;
}
x = newItem;
return x;
})
console.log(arr2)
let scores = [95,91,59,55,42,82,72,85,67,66,55,91]
let scores2 = scores.filter(item => item > 60)
console.log(scores2)
let scores = [95,91,59,55,42,82,72,85,67,66,55,91]
let sum = scores.reduce((sum, n)=>{
if(n % 2 != 0){
sum += n;
}
return sum
},0)
console.log(sum)