filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
简单来讲: filter() 方法可以返回数组中满足指定条件的元素
Array.filter(callbackfn,thisArg); callback: function(currentValue,index,arr)callbackfn的三个参数,currentValue,必须当前元素的值,index可选,当前元素的索引值,arr可选,当前元素属于的数组;对于数组中的元素,filter方法都会调用callbackfn函数一次。
返回值是一个包含回调函数为其返回 true 的所有值得新数组。如果回调函数为 array 的所有元素返回 false,则新数组的长度为 0。
对于数组中的每个元素,filter 方法都会调用 callbackfn 函数一次(采用升序索引顺序)。不为数组中缺少的元素调用该回调函数。回调函数的用法与 map 相同。
arr.reduce(callback,[initialValue]) //reduce 为数组中的每一个元素依次执行回调函数,reduce对数组中每个元素执行一个自定义的累加器,将其结果汇总为单个返回值
过程(重点看)
var total = [0,1,2,3].reduce((acc,cur) => { return acc + cur },0); console.log(total); //二维数组转一维度 var array = [[1,2],[3,4],[5,6]].reduce((acc,cur) => { return acc.concat(cur); },[]); //计算数组中每个元素出现的次数 let names = ['tom','jim','jack','tom','jack']; const countNames = names.reduce((allNames,name) => { if(name in allNames){ allNames[name]++; }else{ allNames[name] = 1; } return allNames; },{}); console.log(countNames); const arraySum = (arr,val) => arr.reduce((acc,cur) => { return cur == val ? acc + 1 : acc + 0; },0) //数组去重 let arr = [1,2,2,2,3,4,4,8,5,6]; let result = arr.sort().reduce((init,current) => { if(init.length == 0 || init[init.length - 1] !== current){ init.push(current); } return init; },[]); //利用reduce实现数组扁平化 const myFlat = (arr) => { return arr.reduce((pre,cur) => { return pre.concat(Array.isArray(cur) ? myFlat(cur):cur); },[]) }
//使用reduce取代map和filter const numbers = [10,20,30,40]; const doubledOver50 = numbers.reduce((finalList,num) => { num = num * 2; if(num > 50){ finalList.push(num); } return finalList; },[]);
Object.defineProperty(obj,key,{ set(newValue){ value = newValue; console.log(key,value); }, get(){ console.log('获取key值的变化',key); return value; } })