用于合并相同id的某个值数据

几个注意点详解

  1. JSON.parse(JSON.stringify(parentData)) 当前函数是为了避免直接改动原数据
  2. 第一个for是为了取数据,第二个for是为了遍历后面还有哪些数据是相等的
  3. 通过函数传递的id和key值进行相同项判断,以及合并数据
  4. y -= 1,因为data.splice(y, 1)去除了当前项,所以需要把y的序号往下改1,便于y++访问到删除一个元素时它的后一个元素
function setData(parentData, id = 'id', key = 'key'){
  if (!Array.isArray(parentData)) { // 判断是否是数组形式,不是,则抛出异常
    throw new Error('parentData is not a array')
  }
  let data = JSON.parse(JSON.stringify(parentData))
  for (let i = 0; i < data.length; i++) {
     for (let y = i + 1; y < data.length; y++) {
       if (data[y][id] === data[i][id]) {
          data[i][key] = Number(data[i][key]) + Number(data[y][key])
          data.splice(y, 1)
          y -= 1
       }
     }
  }
  return data
}

支持的数据调用说明

const data = [
  { id: 1, num: 20 },
  { id: 2, num: 10 },
  { id: 1, num: 5 },
  { id: 1, num: 20 }
]

const data1 = setData(data, 'id', 'num')
// data1 = [{ id: 1, num: 45 }, { id: 2, num: 10 }]