// 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]
*/

  

posted on 2020-05-12 19:33  姓叶,名铁柱  阅读(327)  评论(0编辑  收藏  举报