// map filter some forEach every find findIndex reduce
let arr = [7,4,5,6,2]
//返回一个新数组, 长度不变。[7, 4, 5, 6, false]
let a0 = arr.map( v => v > 3 && v)
//返回一个新数组, 长度会改变 [7, 6]
let a1 = arr.filter( v => v > 5)
//返回true和false 找到符合条件就会直接跳出循环
let a2 = arr.some( v => v > 8)
//返回true和false 所有条件满足才能返回true
let a3 = arr.every( v => v > 1) //true
// let a4 = arr.forEach( v => console.log(v) )
let findArr = [{name: 1, id: 1}, {name: 2, id: 2}, {name: 3, id: 3}]
//返回true 停止循环体 会把当前的值返回 {name: 2, id: 2}
const a4 = findArr.find( v => v.id === 2 )
// 返回下标 停止循环体
let a5 = findArr.findIndex( v => v.id === 2 )
// [{name: 1, id: 1},{name: 3, id: 3}]
findArr.splice(a5, 1) //改变原数组
// console.log(a3)
let arr1 = [1, 2, 4];
//arr.reduce( 函数(必须有return), [默认值])
//count -> 1 value -> 2 第一次循环 count 默认不写, 那就是 arr1的第一个元素也就是1
//count -> 3 value -> 4 第二次循环 count是 1 + 2 的返回值 也就是3
let a6 = arr1.reduce( (count, value, key, arry) => {
// console.log(count); // 结果依次为1,3
// console.log(value); // 结果依次为1,2,4
// console.log(key); // 结果依次为0,1,2
// console.log(arry) // 三次结果都为[1,2,4]
return count + value;
});
// console.log(arr1); // 结果为[ 1, 2, 4 ]
// console.log(a6) // 结果为7
// 代码解读:reduce的不同之处在于累加,和其他几个内置方法不同的地方,它的第二个参数不是this对象,
// 而是初始累加值(如果不设置的话数组会乱掉),而且回调函数的的个数也不同,比其他的多了一个,
let arr2 = [1,3,1,7,5] //统计数组中的数字, 出现了几次。
let sum = arr2.reduce( (obj, value) => {
if(obj[value]){
obj[value].push(value)
}else{
obj[value] = [value]
}
return obj
},{})
console.log(sum);
/*
{ Array(2), 3: Array(1), 5: Array(1), 7: Array(1) }
1: (2) [1, 1]
3: [3]
5: [5]
7: [7]
*/