0

I want to group the duplicate elements as separate array of objects, Please help me on this

EX:

array = [{key: 1}, {key: 5}, {key: 1}, {key: 3}, {key: 5}, {key: 1}, {key: 3}, {key: 2}, {key: 1}, {key: 4}];

expected O/P:

newArrayObj = {[{key: 1}, {key: 1}, {key: 1}, {key: 1}], [{key: 3}, {key: 3}], [{key: 4}], [{key: 5}, {key: 5}] } 
Nick Parsons
  • 45,728
  • 6
  • 46
  • 64
YYY
  • 3,440
  • 5
  • 20
  • 24

2 Answers2

0

~ 80% faster then @ShayD answer:

let array = [
  { key: 1 },
  { key: 5 },
  { key: 1 },
  { key: 3 },
  { key: 5 },
  { key: 1 },
  { key: 3 },
  { key: 2 },
  { key: 1 },
  { key: 4 }
];

let x = [];

for (let i = 0; i < array.length; ) {
  const obj = array[i];
  const filtered = array.filter(filterObj => obj.key == filterObj.key);
  array = array.filter(filterObj => obj.key != filterObj.key);
  x.push(filtered);
}

document.querySelector("#output").innerText = JSON.stringify(x);
<p id="output"></p>
Josh
  • 159
  • 9
-1

Taken from here: https://stackoverflow.com/a/47385953/5107490

let array = [{key: 1}, {key: 5}, {key: 1}, {key: 3}, {key: 5}, {key: 1}, {key: 3}, {key: 2}, {key: 1}, {key: 4}];

let groupedArray = array.reduce((hash, obj) => ({
  ...hash, 
  [obj['key']]:( hash[obj['key']] || [] ).concat(obj)
}), {});

console.log(groupedArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }
ShayD
  • 689
  • 7
  • 17