Предположим, следующие объекты

let oldArr = [ { a: 1 }, { a: 2 }, { a: 3 }, { b: 1 }, { b: 2 }, { c: 1 } ] 

Желаемый результат

 let newArr = [ [ { a: 1 }, { a: 2 }, { a: 3 }, ], [ { b: 1 }, { b: 2 }, ], [ { c: 1 } ], ] 

Я пытаюсь использовать lodash, я вижу функцию разбиения, но она разбивает массивы только на 2 группы. GroupBy группирует его в объект по ключам. Есть ли хороший способ? надеюсь получить помощь всех, спасибо!

Просто так:

 let oldArr = [ { a: 1 }, { a: 2 }, { a: 3 }, { b: 1 }, { b: 2 }, { c: 1 } ] let objects = {}; for (let item of oldArr) { // get key let key = Object.keys(item)[0]; // check if this key added before if (!objects[key]) objects[key] = []; // push this object objects[key].push(item); } let newArr = Object.values(objects); console.log(newArr) 

Но вы должны быть уверены, что каждый объект в oldArr имеет только один ключ.

Вы можете сделать это, используя Object.keys , Object.values и Array.reduce

 let oldArr = [ { a: 1 }, { a: 2 }, { a: 3 }, { b: 1 }, { b: 2 }, { c: 1 }, { a: 4, c: 2 } ] let newArr = // drop the keys of the object created by the reduce Object.values( // for each object in the array oldArr.reduce((acc, el) ={amp}gt; { // for each keys in the object Object.keys(el).forEach(key ={amp}gt; { // add the object to the group of objects with this key acc[key] = acc[key] || [] acc[key].push(el) }) return acc }, {}) ) console.log(newArr) 

если объект на входе имеет несколько ключей, он будет переходить к каждой группе на выходе

вы можете использовать так

 let oldArr = [ { a: 1 }, { a: 2 }, { a: 3 }, { b: 1 }, { b: 2 }, { c: 1 } ]; let newArr = {}; oldArr.forEach((i)={amp}gt;{ let key = Object.keys(i)[0]; newArr[key] = newArr[key] || []; newArr[key].push(i); }); newArr = Object.values(newArr); console.log(newArr);