// 数组的常见方法
// map (some, every, filter,forEach) es5
// find findIndex --es6
// reduce (遍历两两相加方法) 收敛 叠加
// for of();
// Array.form 配合new Set() 实现数组去重
// keys,values,entries --es6新提供方法
// 1、 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)
// 3. 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]
// 4. every遍历 返回false
let arr3 = [ 1, 2, 3, 4, 5, 6 ];
console.log(arr3.every( function( item, index, array ){
return item === 3;
}));
// 5. some遍历
// some()方法找到后就返回true, 返回后就停止遍历
let arr4 = [ 1, 2, 3, 4, 5, 6 ];
console.log( arr4.some( function( item, index, array ){
return item === 3;
}));
// 6. find 方法
// 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)
// 7. 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, 表示不存在
// 8. 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);
}
// 8. 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'}))
// 9. Array.from()类数组转换成数组
function arg(){
// console.log(arguments)
console.log(Array.from(arguments)) // 转成数组
console.log(eval(Array.from(arguments).join("+"))) // 累加
}
arg(1, 2, 3);
// 10. of 类数组转成数组
let ary = Array.of(1,2,3)
console.log(ary)
数组的常见遍历方法
最新推荐文章于 2024-08-21 11:33:40 发布