数组常用方法总结:filter/map/reduce/...

实用案例:

    let arr = [1, 2, 3, 34, 67, 89, 23];
    let newArr = arr.filter(x => x < 20).map(x => x * 2).reduce((prev, cur) => prev + cur);
    console.log(newArr);//12

a.强大的reduce

detail:浅谈JS中 reduce() 的用法
JS数组reduce()方法详解及高级技巧

arr.reduce(callback,[initialValue])

callback (执行数组中每个值的函数,包含四个参数)

    1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
    2、currentValue (数组中当前被处理的元素,item in arr)
    3、index (当前元素在数组中的索引)
    4、array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)

1.常用来求和/求积:

var  arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和,10
console.log( mul ); //求乘积,24

2. 数组去重

var  arr = [1, 2, 3, 4];
var newArr = arr.reduce(function (prev, cur) {
    
    
    prev.indexOf(cur) === -1 && prev.push(cur);
    return prev;
},[]);

解析: initialValue为一个空数组,确定了pre和返回值类型为数组;
第一次: prev=[], cur=arr[0]=1;
第二次: prev=[1], cur=2;

3.数组扁平化

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
    
    
   return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

4.对象属性求和

var result = [
    {
    
    
        subject: 'math',
        score: 10
    },
    {
    
    
        subject: 'chinese',
        score: 20
    },
    {
    
    
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    
    
    return cur.score + prev;
}, 0);
console.log(sum) //60

b. map

    /* map函数: 处理arr里的每一个item,并返回新数组 */
    let arr = [1, 2, 3, 34, 67, 89, 23];
    let newArr2 = arr.map(callback);

    function callback(n) {
    
    
      return n * 2;
    }
    console.log(newArr2); //(7) [2, 4, 6, 68, 134, 178, 46]

c. filter

    let arr = [1, 2, 3, 34, 67, 89, 23];
    /* filter回调函数要求:必须返回一个boolean值; true:把这次回调的n加入到新的数组中 */
    let newArr1 = arr.filter(callback);

    function callback(n) {
    
    
      return n < 20; //将满足条件的数组元素添加到新数组里面
    }
    console.log(newArr1); //(3) [1, 2, 3]

Guess you like

Origin blog.csdn.net/Fky_mie/article/details/117697689