遇到一个需求,需要统计一个数组对象里面的重复的字段的属性值Value
const data = [
{ name: '项目1', value: 40 },
{ name: '项目1', value: 40 },
{ name: '项目1', value: 40 },
{ name: '项目1', value: 40 },
{ name: '项目1', value: 32 },
{ name: '项目1', value: 16 },
{ name: '项目1', value: 32 },
{ name: '其他', value: 10 },
{ name: '项目1', value: 40 },
{ name: '项目1', value: 16 },
{ name: '项目2', value: 24 },
{ name: '项目1', value: 40 },
{ name: '项目1', value: 8 },
{ name: '项目3', value: 32 },
{ name: '项目1', value: 24 },
{ name: '项目3', value: 24 },
{ name: '项目1', value: 20 },
{ name: '项目4', value: 7 },
{ name: '项目2', value: 13 },
{ name: '项目1', value: 24 },
{ name: '项目1', value: 40 },
{ name: '项目1', value: 40 },
{ name: '项目5', value: 40 },
{ name: '项目1', value: 16 },
{ name: '项目5', value: 24 },
{ name: '项目5', value: 24 },
{ name: '项目1', value: 4 },
{ name: '项目5', value: 36 },
{ name: '项目5', value: 24 },
{ name: '项目6', value: 24 },
{ name: '项目5', value: 32 },
{ name: '项目6', value: 43 },
{ name: '项目1', value: 40 },
{ name: '项目3', value: 8 },
{ name: '项目7', value: 44 },
{ name: '项目7', value: 32 },
{ name: '项目6', value: 8 },
{ name: '项目7', value: 40 },
{ name: '项目7', value: 40 },
{ name: '项目7', value: 49 },
{ name: '项目7', value: 40 },
{ name: '项目7', value: 40 },
{ name: '项目8', value: 32 },
{ name: '项目7', value: 32 },
{ name: '项目7', value: 40 },
{ name: '项目9', value: 24 },
{ name: '项目8', value: 16 },
{ name: '项目8', value: 40 },
{ name: '项目2', value: 32 }
]
已知上面的数组对象,我们需要把重复的字段值保存在一个数组当中,也就是下面这样
const newdata = [
{
name: '项目1',
value: [
40, 40, 40, 40, 32, 16, 32,
40, 16, 40, 8, 24, 20, 24,
40, 40, 16, 4, 40
]
},
{ name: '其他', value: [ 10 ] },
{ name: '项目2', value: [ 24, 13, 32 ] },
{ name: '项目3', value: [ 32, 24, 8 ] },
{ name: '项目4', value: [ 7 ] },
{ name: '项目5', value: [ 40, 24, 24, 36, 24, 32 ] },
{ name: '项目6', value: [ 24, 43, 8 ] },
{
name: '项目7',
value: [
44, 32, 40, 40, 49,
40, 40, 32, 40
]
},
{ name: '项目8', value: [ 32, 16, 40 ] },
{ name: '项目9', value: [ 24 ] }
]
话不多说直接上代码 先遍历原数组,将项目名字加入到数组nameArr中,并判断有无重复,如果有重复的话,就将重复的元素的value值加入到数组newArr的对应元素上
const nameArr = []
const newArr = []
function StaticValue(data) {
data.forEach((ele, i) => {
if(nameArr.indexOf(data[i].name) === -1) {
newArr.push({
name: data[i].name,
value: [data[i].value]
})
nameArr.push(data[i].name)
} else {
newArr.forEach((item, index) => {
if(newArr[index].name == data[i].name) {
newArr[index].value.push(data[i].value)
}
})
}
}
)
}
StaticValue(data)
console.log(newArr)
运行结果如下图所示。