【发布时间】:2021-03-12 11:14:28
【问题描述】:
给定这个对象数组:
[
{"Code": 101, "Description": "Invoice"},
{"Code": 102, "Description": "Credit"},
{"Code": 103, "Description": "Credit"},
{"Code": 111, "Description": "Invoice"},
{"Code": 112, "Description": "Credit"},
{"Code": 113, "Description": "Credit"},
{"Code": 182, "Description": "Backup"}
]
我需要将匹配Descriptions 的对象组合成一个带有Codes 数组的单个对象,如下所示:
[
{"Code": [101,111], "Description": "Invoice"},
{"Code": [102,103,112,113], "Description": "Credit"},
{"Code": [182], "Description": "Backup"}
]
我已尝试使用下面的 groupBy() 辅助函数(香草 JS 函数),但它不起作用,因为我得到了一个带有单个 undefined 属性的 Object,其原始数组的值为:
var groupBy = function (arr, criteria) {
return arr.reduce(function (obj, item) {
// Check if the criteria is a function to run on the item or a property of it
var key = typeof criteria === 'function' ? criteria(item) : item[criteria];
// If the key doesn't exist yet, create it
if (!obj.hasOwnProperty(key)) {
obj[key] = [];
}
// Push the value to the object
obj[key].push(item);
// Return the object to the next item in the loop
return obj;
}, {});
};
var array = [
{"Code": 101, "Description": "Invoice"},
{"Code": 102, "Description": "Credit"},
{"Code": 103, "Description": "Credit"},
{"Code": 111, "Description": "Invoice"},
{"Code": 112, "Description": "Credit"},
{"Code": 113, "Description": "Credit"},
{"Code": 182, "Description": "Backup"}
];
var groupDescription = groupBy(array, array.forEach(document => document.Description));
console.log(groupDescription);
实现预期输出的最佳方式是什么?
【问题讨论】:
-
“最好的方法” - 你在找什么?当前的代码不起作用吗?
-
Mods:OP 之前曾问过这个问题,原始问题被否决并作为欺骗关闭。但是,欺骗链接上接受的答案并没有回答问题......
-
感谢@RobinMackenzie 的澄清!
-
@evolutionxbox 不,它没有做我需要的。不过,罗宾的回答确实如此
标签: javascript arrays json object