用于合并相同id的某个值数据
几个注意点详解
JSON.parse(JSON.stringify(parentData)) 当前函数是为了避免直接改动原数据
- 第一个for是为了取数据,第二个for是为了遍历后面还有哪些数据是相等的
- 通过函数传递的id和key值进行相同项判断,以及合并数据
- 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 }]