我有一个具有重复键/值对的对象数组。我用.map()
来操纵它的结构。我想通过将属性System.Title
作为附加对象添加到共享相同Title
的项目来组合这些重复对。
var doctypes = [{
"System": {
"Title": "FIS NetImage"
},
"Title": "Notices",
}, {
"System": {
"Title": "OmniView"
},
"Title": "Notices",
}, {
"System": {
"Title": "Nautilus"
},
"Title": "Reports",
}, {
"System": {
"Title": "FIS NetImage"
},
"Title": "Statements",
}]
var modDocTypes = doctypes.map(modDocType => ({
Title: modDocType.Title,
System: [{
Title: modDocType.System.Title
}]
}))
console.log(modDocTypes)
// DESIRED OUTCOME:
//[
// {
// "Title": "Notices",
// "System": [
// {
// "Title": "FIS NetImage"
// },
// {
// "Title": "OmniView"
// }
// ]
// },
// {
// "Title": "Reports",
// "System": [
// {
// "Title": "Nautilus"
// }
// ]
// },
// {
// "Title": "Statements",
// "System": [
// {
// "Title": "FIS NetImage"
// }
// ]
// }
//]
我该如何做到这一点?
答案 0 :(得分:2)
由于输入数组对象和输出数组对象不是一对一的,因此您必须使用reduce
来组合相同的Title
:
const input = [{
"System": {
"Title": "FIS NetImage"
},
"Title": "Notices",
}, {
"System": {
"Title": "OmniView"
},
"Title": "Notices",
}, {
"System": {
"Title": "Nautilus"
},
"Title": "Reports",
}, {
"System": {
"Title": "FIS NetImage"
},
"Title": "Statements",
}];
const output = input.reduce((a, { Title, System }) => {
const foundTitleObj = a.find(obj => obj.Title === Title);
if (foundTitleObj) {
foundTitleObj.System.push(System);
return a;
}
const newTitleObj = {
Title,
System: [ System ],
};
a.push(newTitleObj);
return a;
}, []);
console.log(output);