组合数组中包含几乎相同键的javascript对象



我有一个包含对象的数组。数组看起来像这样:

[
{
"number": "10a",
"person": "Velvet"
},
{
"number": "10b",
"person": "Edna"
},
{
"number": "11a",
"person": "Shionne"
},
{
"number": "11b",
"person": "Aifread"
},
]

我想组合具有相同number属性的对象。例如,前两个对象的属性分别是number: "10a"number: "10b"。我希望将这些组合起来,使输出变成:

{
"10": {
"person": ["Velvet", "Edna"]
},
"11": {
"person": ["Shionne", "Aifread"]
}
}

我不知道怎么做,因为它对我来说太复杂了。我也看了stackoverflow,但似乎找不到类似的问题,因此,我的帖子。谢谢你的帮助!

我假设数字的规范化只是为了删除非数字字符。如果是这样,您可以只遍历原始数组并处理每个元素:

var original = [
{
"number": "10a",
"person": "Velvet"
},
{
"number": "10b",
"person": "Edna"
},
{
"number": "11a",
"person": "Shionne"
},
{
"number": "11b",
"person": "Aifread"
},
];
const merged = {}

original.forEach(item => {
var normalizedKey = item.number.replaceAll( /D/g, "" )
if(!merged[normalizedKey]) merged[normalizedKey] = { person: []}
merged[normalizedKey].person.push(item.person)
})

console.log({merged})

解析编号。如果缺少对象,添加对象并附加名称:

const result = {};
arr.forEach(o => {
const nr = o.number.slice(0,2);
result[nr] = result[nr] || {person:[]};
result[nr].person.push(o.person);
});
console.log(result);

最新更新