我在结构中有一个javascript对象
var data = {
"items": [
{
"User": {
"first_name": "Testing",
"last_name" : "test",
"age" : 23
}
},
{
"User": {
"first_name": "Testing_2",
"last_name" : "test_tested",
"age": 24
}
},
{
"User": {
"first_name": "Testing_3",
"last_name" : "test_test",
"age" : 23
}
}
]
};
我正在尝试将对象结构修改为, 样本输出:
var data = [
[
{
"User": {
"first_name": "Testing",
"last_name" : "test",
"age" : 23
}
},
{
"User": {
"first_name": "Testing_3",
"last_name" : "test_test",
"age" : 23
}
}
],
[
{
"User": {
"first_name": "Testing_2",
"last_name" : "test_tested",
"age": 24
}
}
]
];
逻辑:我正在尝试根据年龄对用户进行分组。但是我的逻辑错误,请告诉我哪里出错或者用任何简单的逻辑来实现所需的解决方案。
items = data.items;
var user = [], out= [];
for (var i = 0; i < items.length; i++) {
var dt = items[i].User.age,
index = user.indexOf(dt);
if (index == -1) {
user.push(dt);
out.push(new Array(items[i]));
}
out[index].push(items[i]);
}
return out;
请帮帮我。
答案 0 :(得分:3)
将项目插入由age
索引的空数组中的存储桶中。过滤掉空桶,你就会得到你想要的东西。
var results = [];
data.items.forEach(function (item) {
results[item.User.age] = results[item.User.age] || [];
results[item.User.age].push(item);
});
return results.filter(function (res) { return res; });
答案 1 :(得分:2)
您可以将对象用作对结果数组的引用的哈希表。
此解决方案仅在一个循环中运行。
var data = { "items": [{ "User": { "first_name": "Testing", "last_name": "test", "age": 23 } }, { "User": { "first_name": "Testing_2", "last_name": "test_tested", "age": 24 } }, { "User": { "first_name": "Testing_3", "last_name": "test_test", "age": 23 } }] },
grouped = [];
data.items.forEach(function (a) {
if(!this[a.User.age]) {
this[a.User.age]=[];
grouped.push(this[a.User.age]);
}
this[a.User.age].push(a);
}, Object.create(null));
console.log(grouped);
答案 2 :(得分:2)
您可以使用age
功能
.reduce
进行分组
var output = data.items.reduce(function(result,obj){
result[obj.User.age] = result[obj.User.age] || []
result[obj.User.age].push(obj);
return result
},{});
而不是array
我们可以使用object
,因为它更容易操作。
如果你想要严格的数组,那么我们可以修改如下
Object.keys(output).map(function(x){
return output[x];
});
答案 3 :(得分:2)
您需要在条件中添加其他:
items = data.items;
var user = [], out= [];
for (var i = 0; i < items.length; i++) {
var dt = items[i].User.age,
index = user.indexOf(dt);
if (index == -1) {
user.push(dt);
out.push(new Array(items[i]));
} else {
out[index].push(items[i]);
}
}
return out;
选中此Plunker