重点总结:
reduce() 是数组的归并方法,与forEach()、map()、filter()等迭代方法一样都会对数组每一项进行遍历,但是reduce() 可同时将前面数组项遍历产生的结果与当前遍历项进行运算,这一点是其他迭代方法无法企及的
arr.reduce(function(prev,cur,index,arr){
arr表示原数组
prev表示上一次调用回调时的返回值,初始值init
cur表示当前正在处理的数组元素
index表示当前正在处理的数组元素的索引
},init)
1.求数组项之和
var arr = [1,2,3,4,5,6]; var sum = arr.reduce(function (prev, cur){
return prev + cur; },0)
2.求数组项最大值
var max = arr.reduce(function( prev,cur){
return Math.max(prev,cur) })
3.数组去重
var newArr = arr.reduce(function(prev, cur){
prev.indexOf(cur) === -1 && prev.push(cur) return prev },[])
4.求字符串中字母出现的次数
const str = 'sfhjasfjgfasjuwqrqadqeiqsajsdaiwqdaklldflas-cmxzmnha'; const res = str.split('').reduce((accumulator, cur) => {
accumulator[cur] ? accumulator[cur]++ : accumulator[cur] = 1; return accumulator; }, {
});
5.扁平一个二维数组
var arr = [[1, 2, 8], [3, 4, 9], [5, 6, 10]]; var res = arr.reduce((x, y) => x.concat(y), []);
6.对象数组去重
let person = [ {
id: 0, name: "小明"}, {
id: 1, name: "小张"}, {
id: 2, name: "小李"}, {
id: 3, name: "小孙"}, {
id: 1, name: "小周"}, {
id: 2, name: "小陈"}, ]; let obj = {
}; let peon = person.reduce((cur,next) => {
obj[next.id] ? "" : obj[next.id] = true && cur.push(next); return cur; },[]) console.log(peon);
7.删除两个数组中id相同的对象
let arr = res.data; let arr1 = res.data1; arr = arr.filter( item => {
let tableData = arr1.map( v=>v.id) return !tableData.includes(item.id) })
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225906.html原文链接:https://javaforall.net
