我有这个对象:
const data = [
{ "key": "Arnav", "value": "J Access" },
{ "key": "Amit", "value": "UP Access" },
{ "key": "Amit", "value": "UP Access" },
{ "key": "Amit", "value": "UP Access01" },
{ "key": "Amit", "value": "UP Access02" },
{ "key": "Arnav", "value": "J Access01" },
{ "key": "John", "value": "EUP Access" },
{ "key": "John", "value": "EUP Access1" },
{ "key": "Arnav", "value": "J Access02" }
];
我只想使用 map 和 filter 将其转换为这个对象:
const result = [
{ "key": "Arnav", "value":["J Access","J Access02", "J Access01"]},
{ "key": "Amit", "value": ["UP Access","UP Access01","UP Access02"]},
{ "key": "John", "value": ["EUP Access", "EUP Access1"]}
];
即唯一的键值对(数组)
理想情况下,您应该使用Array.prototype.reduce
对项目进行分组,首先查找项目是否已经存在或不使用,Array.prototype.findIndex
然后使用Set
.
如果它存在,只需将 加入value
现有的分组数组(在检查重复项之前),否则在分组/累积数组中添加一个新条目:
const data = [
{ "key": "Arnav", "value": "J Access" },
{ "key": "Amit", "value": "UP Access" },
{ "key": "Amit", "value": "UP Access" },
{ "key": "Amit", "value": "UP Access01" },
{ "key": "Amit", "value": "UP Access02" },
{ "key": "Arnav", "value": "J Access01" },
{ "key": "John", "value": "EUP Access" },
{ "key": "John", "value": "EUP Access1" },
{ "key": "Arnav", "value": "J Access02" }
];
const grouped = data.reduce((acc, ele) => {
const idx = acc.findIndex(obj => obj.key === ele.key);
if(idx >= 0){
acc[idx].value = [...new Set(acc[idx].value).add(ele.value)];
}else{
acc.push({key: ele.key, value: [ele.value]});
}
return acc;
}, []);
console.log(grouped);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句