数组的常见方法
map (some, every, filter,forEach) es5
find findIndex --es6
reduce (遍历两两相加方法) 收敛 叠加
for of();
Array.form 配合new Set() 实现数组去重
keys,values,entries --es6新提供的遍历方法
- reduce 返回的结果是叠加后的结果
函数的返回结果会作为下一次循环的prev
let result = [1,2,3,4,5].reduce((prev, next, currIndex, ary)=>{
// prev :第一次循环默认为第一位,有传值的情况等于传值, 第二次循环等于第一次循环的结果,所以需要 return prev + next,否侧这个值为undefined
// next : 下一个值
// currIndex : 当前下标
// ary : 数组
console.log(prev, next, currIndex, ary)
if(currIndex === ary.length - 1){
return (prev + next) / ary.length
}
return prev + next
}, 0) // 传0表示给prev赋值prev = 0
console.log(result) // 3
// 默认传值示列:
let total = [{price: 10}, {price: 20}, {price: 30}].reduce((prev, next, currIndex, ary)=>{
// return prev.price + next.price // 返回NaN
return prev + next.price
}, ) // 提示如果不传返回的最终结果为NaN
console.log(total) // 60
- reduceRight方法的功能和reduce()功能是一样的,不同的是reduceRight()从数组的末尾向前将数组中的数组项做累加
let arr1 = [0,1,2,3,4];
let total2 = arr1.reduceRight((prev, next, currIndex, ary) =>{
return prev + next;
}); // 10
console.log(total2)
- filter遍历 查找指定元素并组成新的数组,不会改变原始数组,返回新数组
let fileterArr = [ { id: 1, text: 'aa', done: true }, { id: 2, text: 'bb', done: false },{ id: 3, text: 'cc', done: '' }];
let xinArr = fileterArr.filter(item=>item.done) // 默认返回true值,或有得值
console.log(xinArr)
let NumberArr = [73,84,56, 22,100]
let newArr = NumberArr.filter(item => item>80) //得到新数组 [84, 100]
- every遍历 返回false (用的比较少)
let arr3 = [ 1, 2, 3, 4, 5, 6 ];
console.log(arr3.every(( item, index, array )=>{
return item === 3;
}));
- some遍历 找到后就返回true, 返回后就停止遍历
let arr4 = [ 1, 2, 3, 4, 5, 6 ];
console.log( arr4.some( function( item, index, array ){
return item === 3;
}));
- find 方法 返回数组中符合测试函数条件的第一个元素。否则返回undefined
注意:这个方法只会返回第一个找的数据,不会返回多个;
let stu = [
{
name: '张三',
gender: '男',
age: 20
},
{
name: '王小毛',
gender: '男',
age: 20
},
{
name: '李四',
gender: '男',
age: 20
}
]
function getStu(element){
return element.name == '李四'
}
console.log(stu.find(getStu))//返回结果为 {name: "李四", gender: "男", age: 20}
// ES6方法使用:
let stuObj = stu.find((element) => (element.name == '李四'))
console.log(stuObj)
- findIndex
对于数组中的每个元素,findIndex 方法都会调用一次回调函数(采用升序索引顺序),直到有元素返回 true。只要有一个元素返回 true,findIndex 立即返回该返回 true 的元素的索引值。如果数组中没有任何元素返回 true,则 findIndex 返回 -1。
// findIndex 不会改变数组对象。
console.log([1,2,3].findIndex(x => x == 2)) // 返回索引值1, 表示返回了此值的下标
console.log([1,2,3].findIndex(x => x == 4)); // 返回索引值-1, 表示不存在
- keys,values,entries
ES6 提供三个新的方法 —— entries(),keys()和values() —— 用于遍历数组。它们都返回一个遍历器对象,可以用for…of循环进行遍历
// keys()是对键名的遍历
for (let index of ['a', 'b'].keys()) {
console.log(index);
} // 打印对应的下标值
// values()是对键值的遍历
for (let item of ['a', 'b'].values()) {
console.log(item);
} // 打印对应的元素值
// entries()是对键值对的遍历
for (let [index, item] of ['a', 'b'].entries()) {
console.log(index, item);
}
- includes : some 和every的集合
console.log([1,2,3].includes(3)) // 找到就返回true, 找不到就返回false
// 不可以这样使用 比较的是引用而不是具体的值
// let objects = [{name:'moum', age:'11'},{ name:'wefew', age:'12'}]
// console.log(objects.includes({name:'moum', age:'11'}))
- Array.from类数组转换成数组
function arg(){
// console.log(arguments)
console.log(Array.from(arguments)) // 转成数组
console.log(eval(Array.from(arguments).join("+"))) // 累加
}
arg(1, 2, 3);
- of 类数组转成数组
let ary = Array.of(1,2,3)
console.log(ary)