Array的reduce方法

113 阅读2分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,[点击查看活动详情] (s.juejin.cn/ds/jooSN7t "s.juejin.cn/ds/jooSN7t"…

Array.reduce()方法是对数组的遍历,返回一个单个返回值

/**
* @params total 必需。初始值, 或者计算结束后的返回值
* @params  currentValue 必需。当前元素
* @params  currentIndex 可选。当前元素的索引
* @params  arr 可选。当前元素所属的数组对象
* @params initialValue 可选。传递给函数的初始值
**/
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
reduce 返回 数值
const array = [2,3,6,7]
//求和
const result = array.reduce((a,b,index) => {
	return a+b
},0)
// 这里result 返回数值 18

//求积
const result = array.reduce((a,b,index) => {
	return a*b
},1) //初始值传1
// 这里result 返回数值 252

reduce 返回字符串
const array = [1,2,3,4,5,6,7,8]
const result = array.reduce((a,b) => {
	a = `${a}${b}`
	return a
},'')
// 这里result 返回字符串 12345678
reduce 返回对象
const array = [
	{key: 'name', value: 'wsf'},
	{key: 'age', value: '18'},
	{key: 'sex',value: 'man'}
]
const result = array.reduce((a,b) => {
	a[b.key] = b.value
	return a
},{})
// 这里result 返回对象 {name: "wsf",age: "18",sex: "man"}

reduce 返回数组
const array = [
	{key: 'name', value: 'wsf'},
	{key: 'age', value: '18'},
	{key: 'sex',value: 'man'}
]
const result = array.reduce((a,b) => {
	a.push(b.key)
	return a
},[])
// 这里result 返回对象 ["name", "age", "sex"]

reduce 数组去重
// 普通数组去重
let arr = [1, 3, 3, 2, 4, 4, 5, 3, 2, 5, 6]
let newArr = arr.reduce((acc, cur) => {
  if (!acc.includes(cur)) {
    acc.push(cur)
  }
  return acc
}, [])
console.log(newArr) // (6) [1, 3, 2, 4, 5, 6]

// 对象数组去重, 对象数组去重需指定以哪个对象属性来去重
let arr1 = [
{
  name: '李明',
  age: 18
}, {
  name: '韩梅梅',
  age: 18
}, {
  name: '韩梅梅',
  age: 20
}, {
  name: '李明',
  age: 20
}, {
  name: 'jack',
  age: 22
}, {
  name: '张三',
  age: 22
}]

function doRepeat (arr, key) {
  let obj = {}
  let newArr1 = arr.reduce((acc, cur) => {
    if (!obj[cur[key]]) {
      obj[cur[key]] = cur[key]
      acc.push(cur)
    }
    return acc
  }, [])
  return newArr1
}
// 姓名去重
console.log(doRepeat(arr1, 'name'))
// 0: {name: "李明", age: 18}
// 1: {name: "韩梅梅", age: 18}
// 2: {name: "jack", age: 22}
// 3: {name: "张三", age: 22}

// age去重
console.log(doRepeat(arr1, 'age'))
// 0: {name: "李明", age: 18}
// 1: {name: "韩梅梅", age: 20}
// 2: {name: "jack", age: 22}
reduce 二维数组转一维数组
var arr=[
    [
        {name:'123';age:'12'},
        {name:'1456';age:'1'},
    ],
    [
        {name:'2';age:'3'},
        {name:'3';age:'11'},
    ]
]

arr.reduce((item,p)=> p.concat(item),[])

// 返回
arr=[
    {name:'123';age:'12'},
    {name:'1456';age:'1'},
    {name:'2';age:'3'},
    {name:'3';age:'11'}
]