JS处理数组内如果相同ID追加一个属性(如字体颜色)
时间: 2024-03-11 13:50:58 浏览: 61
在数组中添加一个元素
5星 · 资源好评率100%
可以使用 JavaScript 的 Array.prototype.reduce() 方法来实现。具体步骤如下:
1. 首先将数组进行分组,将相同 ID 的元素放在同一个数组中;
2. 对每个分组进行处理,给其中的元素追加属性;
3. 将分组合并为一个新的数组。
下面是一个示例代码:
```javascript
const data = [
{ id: 1, name: 'A', color: 'red' },
{ id: 2, name: 'B', color: 'green' },
{ id: 1, name: 'C' },
{ id: 3, name: 'D', color: 'blue' },
{ id: 2, name: 'E' }
];
const result = Object.values(data.reduce((acc, cur) => {
acc[cur.id] = acc[cur.id] || [];
acc[cur.id].push(cur);
return acc;
}, {})).reduce((acc, cur) => {
const first = cur[0];
const hasColor = cur.some(item => item.color);
if (hasColor) {
acc.push(...cur);
} else {
acc.push(...cur.map(item => ({ ...item, color: first.color })));
}
return acc;
}, []);
console.log(result);
```
在这个示例代码中,首先使用 reduce() 方法将数据分组,然后再使用 reduce() 方法对每个分组进行处理。如果分组中有任意一个元素有 color 属性,那么就直接将整个分组放入结果数组中;否则就给每个元素追加 color 属性,属性值为该分组的第一个元素的 color 值。
最后的结果数组就是处理之后的新数组,可以根据需求进行进一步的操作。
阅读全文