Сортировать массив и его ключ объекта в алфавитном порядке в JavaScript - PullRequest
0 голосов
/ 01 июня 2018

У меня есть массив в следующем формате.Я отсортировал массив в алфавитном порядке. Но каждый элемент в массиве, существует подмассив.Я бы тоже хотел отсортировать их в алфавитном порядке.

var myObj = [
          {
          "name":"John",
          "items": [
              { "id":1, "car":"maruti" },  
              { "id":2, "car":"wolks" },
              { "id":3, "car":"bmw" }            
          ]},
          {
            "name":"Peter",
          "items": [
              { "id":4, "car":"alto" },  
              { "id":5, "car":"swift" },                          
          ]
       }
      ];

Это код, который я использовал для сортировки основного массива.Здесь я хотел бы отсортировать массив 'items' в алфавитном порядке.

 myObj.sort(function(a, b){
        var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();          
        if (nameA < nameB) {
          return -1
        }
        if (nameA > nameB){
          return 1
        }
        return 0 
      }); 

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Вам нужно перебрать все объекты в массиве.Вы можете использовать функцию карты для этого и сортировать каждый список элементов с помощью функции сортировки.

var myObj = [
          {
          "name":"John",
          "items": [
              { "id":1, "car":"maruti" },  
              { "id":2, "car":"wolks" },
              { "id":3, "car":"bmw" }            
          ]},
          {
            "name":"Peter",
          "items": [
              { "id":4, "car":"alto" },  
              { "id":5, "car":"swift" },                          
          ]
       }
      ];
function sorting(a, b){
    // you can use just 
    // return a.car.localeCompare(b.car)  
    // reference CertainPerformance answer
    var nameA=a.car.toLowerCase(), nameB=b.car.toLowerCase();          
    if (nameA < nameB) {
      return -1
    }
    if (nameA > nameB){
      return 1
    }
    return 0 
}
myObj.forEach(obj => obj.items.sort(sorting))
console.log(myObj)
// myObj.map(obj => obj.items.sort(sorting)) // returns new array
// updated answer for useful comments.
0 голосов
/ 01 июня 2018

Вам нужно перебрать массив, а затем отсортировать items каждого объекта.

var myObj = [{"name":"John","items":[{"id":1,"car":"maruti"},{"id":2,"car":"wolks"},{"id":3,"car":"bmw"}]},{"name":"Peter","items":[{"id":4,"car":"alto"},{"id":5,"car":"swift"},]}];
      
myObj.forEach(({items}) => items.sort((a,b) => a.car.localeCompare(b.car)));
console.log(myObj);
0 голосов
/ 01 июня 2018

Неправильно делать что-либо в sort функции , кроме , кроме сортировки непосредственных элементов в массиве - я бы повторил дважды, один раз для сортировки myObj и один раздля сортировки каждого items свойства.

Вы также можете использовать localeCompare для упрощения кода:

var myObj=[{"name":"John","items":[{"id":1,"car":"maruti"},{"id":2,"car":"wolks"},{"id":3,"car":"bmw"}]},{"name":"Peter","items":[{"id":4,"car":"alto"},{"id":5,"car":"swift"},]}]
myObj.sort((a, b) => a.name.localeCompare(b.name));
myObj.forEach(({ items }) => items.sort((a, b) => a.car.localeCompare(b.car)));
console.log(myObj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...