【发布时间】:2021-04-28 22:54:51
【问题描述】:
我有一个对象数组。我需要按 groups 和 children 对这个数组进行分组。我尝试创建一个新数组,其中组名作为键,值作为按组分组的排序数组,但没有给我例外格式。我该怎么做?
以下是我的数据格式:
var data1 = [{
"Name": "Apparel",
"categoryId": 2742,
"categoryName": "Men",
},
{
"Name": "Fragrances",
"categoryId": 2746,
"categoryName": "Men",
},
{
"Name": "Apparel",
"categoryId": 2742,
"categoryName": "Women",
},
{
"Name": "Fragrances",
"categoryId": 2746,
"categoryName": "Women",
}
];
预期输出是:
var data2 = [{
"categoryName": "Men",
"children": [{
"Name": "Apparel",
"categoryId": 2742
},
{
"Name": "Fragrances",
"categoryId": 2746
}
]
},
{
"categoryName": "Women",
"children": [{
"Name": "Apparel",
"categoryId": 2742
},
{
"Name": "Fragrances",
"categoryId": 2746
}
]
}
]
我使用了这个函数,但输出不如预期,但非常接近解决方案
function groupAndSort(array, groupField, sortField) {
var groups = {}; // This object will end being keyed by groups, and elements will be arrays of the rows within the given array, which have been sorted by the sortField
// Put all the rows into groups
for (var i = 0; i < array.length; i++) {
var row = array[i];
var groupValue = row[groupField];
groups[groupValue] = groups[groupValue] || [];
groups[groupValue].push(row);
}
// Sort each group
for (var groupValue in groups) {
groups[groupValue] = groups[groupValue].sort(function(a, b) {
return a[sortField] - b[sortField];
});
}
// Return the results
return groups;
}
groupAndSort(data1, "categoryName", "position"))
这是该代码的输出:
{
Men: [{
categoryId: 2742,
categoryName: "Men",
Name: "Apparel"
}, {
categoryId: 2746,
categoryName: "Men",
Name: "Fragrances"
}],
Women: [{
categoryId: 2742,
categoryName: "Women",
Name: "Apparel"
}, {
categoryId: 2746,
categoryName: "Women",
Name: "Fragrances"
}]
}
我非常接近解决方案,我只需要一些帮助即可按预期完成,非常感谢您的帮助
【问题讨论】:
标签: javascript arrays sorting object grouping