我有一个对象数组,每个对象包含两个类别,其中一个类别代表一个组。
[
{
"uuid": 123,
"group": "test_group"
},
{
"uuid": 321,
"group": "test_group"
},
{
"uuid": 432,
"group": "test_group2"
}
]
我正在寻找生成一个JSON响应,该响应已按组分类。
{
"objects": [
{
"group": "test_group",
"items": [
{
"uuid": 123
},
{
"uuid": 321
}
]
},
{
"group": "test_group2",
"items": [
{
"uuid": 432
}
]
}
]
}
目前我已完成此操作,首先迭代并创建一组所涉及的所有组,然后再次迭代并对其进行适当分组。我想知道是否有更简洁的方法来做这件事,也许是使用ES6中引入的一些新操作符。
答案 0 :(得分:3)
使用Array#reduce
进行迭代,并按组收集项目到Map
。使用spread将Map#values
转换回数组:
$( '.artist_li1' ).click(function() {
$( '.artist_content' ).removeClass( "active" );
$( '.artist_content1' ).addClass( "active" );
});
$( '.artist_li2' ).click(function() {
$( '.artist_content' ).removeClass( "active" );
$( '.artist_content2' ).addClass( "active" );
});
$( '.artist_li3' ).click(function() {
$( '.artist_content' ).removeClass( "active" );
$( '.artist_content3' ).addClass.addClass( "active" );
});
and so on....
答案 1 :(得分:0)
我不知道有一些新的运算符或数组函数可以让它更容易在ES6中引入,但是你应该能够在一次迭代中完成它:
var arrayLength = myArray.length;
var response = {objects: []};
var groupIndex = {};
for (var i = 0; i < arrayLength; i++) {
let group = myArray[i].group;
if (!groupIndex.hasOwnProperty(group)) {
groupIndex[group] = groupIndex.length;
response.objects.push({
group: group,
items: [
{uuid: myArray[i].uuid}
]
}
else {
let index = groupIndex[group];
response.objects[index].items.push({uuid: myArray[i].uuid});
}
}