-2

I have the array like :

Arr = [{name:"abc",age:1},{name:"a",age:4},{name:"ac",age:3},{name:"abc",age:2},{name:"abc",age:9}]

I want to change it like this:

[{name:"abc",age:1},{name:"abc",age:2},{name:"abc",age:9},{name:"a",age:4},{name:"ac",age:3}]

by sorting or swapping it.

ThomasP1988
  • 4,597
  • 3
  • 30
  • 36
ahmed tahir
  • 49
  • 1
  • 6

2 Answers2

0

try this

arr1.sort((a, b) => {
    if(a.name.startsWith(b.name)) { return -1; }
    if(a.name < b.name) { return -1; }
    if(a.name > b.name) { return 1; }
    return 0;
})
Wai Ha Lee
  • 8,598
  • 83
  • 57
  • 92
ThomasP1988
  • 4,597
  • 3
  • 30
  • 36
0

You could collect same named objects with a Map and get the flatted values back.

This approach keeps the given order for name and groups this object with same name together.

var array = [{ name: "abc", age: 1 }, { name: "a", age: 4 }, { name: "ac", age: 3 }, { name: "abc", age: 2 }, { name: "abc", age: 9 }];

array = Array
    .from(array
        .reduce((m, o) => m.set(o.name, [...(m.get(o.name) || []), o]), new Map)
        .values()
    )
    .flat();

console.log(array);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392