按关键字在数组中按元素分组

时间:2017-07-26 08:56:44

标签: javascript angularjs json

我正在AngularJS(1)上开发一个应用程序,我无法弄清楚如何按项目拆分另一个数组中的项目数组。

我的意思是我有一系列不同的项目,我会按照uuid分组项目:

[
    {"name": "toto", "uuid": 1111},
    {"name": "tata", "uuid": 2222},
    {"name": "titi", "uuid": 1111}
];

将会是:

[
    [
        {"name": "toto", "uuid": 1111},
        {"name": "titi", "uuid": 1111}
    ],
    [
        {"name": "tata", "uuid": 2222}
    ]
];

我已经尝试了forEach函数的循环和循环但是如果我的数组很长就很长

3 个答案:

答案 0 :(得分:1)

您可以使用哈希表并在哈希表的数组中收集对象。



var array = [{ name: "toto", uuid: 1111 }, { name: "tata", uuid: 2222 }, { name: "titi", uuid: 1111 }],
    hash = Object.create(null),
    result = [];

array.forEach(function (a) {
    if (!hash[a.uuid]) {
        hash[a.uuid] = [];
        result.push(hash[a.uuid]);
    }
    hash[a.uuid].push(a);
});

console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

您可以使用reduceObject.values()



let a = [
    {"name": "toto", "uuid": 1111},
    {"name": "tata", "uuid": 2222},
    {"name": "titi", "uuid": 1111}
];

let b = Object.values(a.reduce((a,b) => {
    a[b.uuid] = a[b.uuid] ? a[b.uuid].concat(b) : [b];
    return a;
}, {}));

console.log(b);




答案 2 :(得分:-2)

你也可以使用像[{3}}这样的已建立的库来使它变得更简单并省去麻烦:



let arr = [
    {"name": "toto", "uuid": 1111},
    {"name": "tata", "uuid": 2222},
    {"name": "titi", "uuid": 1111}
]

let grouped = _.groupBy(arr, 'uuid')

console.log(grouped)
console.log(Object.values(grouped))

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;