Javascript对象修改

Javascript object modification

我在结构中有一个 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
            }
        }                    
    ]
];

Logic:我正在尝试根据年龄对用户进行分组。但是我的逻辑有些地方错了,请告诉我我哪里错了,或者用任何简单的逻辑来实现所需的解决方案。

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;

请帮帮我。

您可以使用对象作为哈希表来引用结果数组。

此解决方案仅在一个循环中运行。

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);

您可以使用 .reduce 函数

基于 age 进行分组
var output = data.items.reduce(function(result,obj){
    result[obj.User.age] =  result[obj.User.age] || []
  result[obj.User.age].push(obj);
  return result
},{});

我们可以使用 object 而不是 array,因为它更容易操作。

如果你想要严格的数组那么我们可以修改如下

Object.keys(output).map(function(x){
  return output[x];
});

将您的项目插入由 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; });

您需要在条件中添加else :

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