I am developing an application on AngularJS (1) and I can not figure out how to split array of items in another array group by item.
I mean I have an array of different
You could use a hash table and collect the object in the arrays of the hash table.
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; }
You can also use an established library like lodash to make it a lot simpler and save yourself the trouble:
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>
You can use reduce
and 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);