как отсортировать объекты, имеющие вложенный массив в javascript - PullRequest
0 голосов
/ 25 мая 2020

Я хотел бы знать, как отсортировать объект, содержащий вложенный массив в javascript. У меня есть obj, в котором каждое значение свойства ( цвет, продукт) должно быть отсортировано по метке

var obj = {
 color: [{id:1, label: "white"}, {id:2, label: "black"}, {id:3, label:"purple"}],
 product: [{id: 1, label: "women"},{id: 4, label: "men"}, {id: 3,label:"kids"}]
}

function sortobj(obj){
  var result = obj.forEach(grp => {
    return grp.sort((a, b) => a.label- b.label)
  })
  return result;
}

var result = sortobj(obj);

Ожидаемый результат

{
  color: [{id:2, label: "black"}, {id:3, label:"purple"}, {id:1, label: "white"}],
  product: [{id: 3,label:"kids"}, {id: 4, label: "men"}, {id: 1, label: "women"}]
}

Ответы [ 2 ]

0 голосов
/ 25 мая 2020

Первый вызов Object.entries(), чтобы получить массив ключей / значений из объекта, затем используйте Array.reduce() и String.localeCompare() следующим образом:

var obj = {
 color: [{id:1, label: "white"}, {id:2, label: "black"}, {id:3, label:"purple"}],
 product: [{id: 1, label: "women"},{id: 4, label: "men"}, {id: 3,label:"kids"}]
};

function sortObj(obj){
  return Object.entries(obj) // [['color', [{...}, {...}, ...]], ['product', [...]]]
    .reduce((acc, [key, value]) => 
    ({ ...acc, [key]: value.sort((a, b) => a.label.localeCompare(b.label)) }), {});
    // or
    //(acc[key] = value.sort((a, b) => a.label.localeCompare(b.label)), acc), {});
}

var result = sortObj(obj);

console.log(result);

//Expected Output
//  {
//  color: [{id:2, label: "black"}, {id:3, label:"purple"},{id:1, label: "white"}],
//  product: [{id: 3,label:"kids"},{id: 4, label: "men"},{id: 1, label: "women"}]
//  }
0 голосов
/ 25 мая 2020

Вам нужно будет перебрать ключи (свойства) вашего исходного объекта, получить значение каждого свойства и отсортировать его по метке.

function sortobj(obj) {
  return Object.keys(obj).reduce((sortedObj, key) => {
    const value = obj[key];
    const sortedValue = value.sort((a, b) => a.label.localeCompare(b.label));

    return {
      ...sortedObj,
      [key]: sortedValue
    };
  }, {});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...