我正在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函数的循环和循环但是如果我的数组很长就很长
答案 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)
您可以使用reduce
和Object.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;