Чем сортировать многомерный json? [дубликат]

287
27 августа 2017, 06:13

На данный вопрос уже ответили:

  • Как написать компаратор для сортировки? 1 ответ

Допустим, есть многомерный json-массив, состоящий из подобных элементов:

{
  "manufacturer": "Apple",
  "name": "iPhone",
  "model": "7 Plus",
  "memory": [
    "32GB",
    "128GB",
    "256GB"
  ],
  "colours": [
    "Gold",
    "Silver",
    "Pink",
    "Black"
  ],
  "terms": [
    {
      "instalment_full_price": "49$/month",
      "instalment_price": 49,
      "price": 799
    }
  ]
}

Как можно отсортировать между собой эти элементы по возрастанию цены по значению ключа terms[0].price?

Answer 1

Функция sort принимает в качестве аргумента функцию, которая в свою очередь получает 2 элемента. Их нужно сравнить и вернуть -1, 0 или 1. Подробнее на MDN.

const arr = [ 
{ 
  "manufacturer": "Apple", 
  "name": "iPhone", 
  "model": "7 Plus", 
  "memory": [ 
    "32GB", 
    "128GB", 
    "256GB" 
  ], 
  "colours": [ 
    "Gold", 
    "Silver", 
    "Pink", 
    "Black" 
  ], 
  "terms": [ 
    { 
      "instalment_full_price": "49$/month", 
      "instalment_price": 49, 
      "price": 7992 
    } 
  ] 
}, 
{ 
  "manufacturer": "Apple", 
  "name": "iPhone", 
  "model": "7 Plus", 
  "memory": [ 
    "32GB", 
    "128GB", 
    "256GB" 
  ], 
  "colours": [ 
    "Gold", 
    "Silver", 
    "Pink", 
    "Black" 
  ], 
  "terms": [ 
    { 
      "instalment_full_price": "49$/month", 
      "instalment_price": 49, 
      "price": 7991 
    } 
  ] 
}, 
{ 
  "manufacturer": "Apple", 
  "name": "iPhone", 
  "model": "7 Plus", 
  "memory": [ 
    "32GB", 
    "128GB", 
    "256GB" 
  ], 
  "colours": [ 
    "Gold", 
    "Silver", 
    "Pink", 
    "Black" 
  ], 
  "terms": [ 
    { 
      "instalment_full_price": "49$/month", 
      "instalment_price": 49, 
      "price": 79956 
    } 
  ] 
}, 
{ 
  "manufacturer": "Apple", 
  "name": "iPhone", 
  "model": "7 Plus", 
  "memory": [ 
    "32GB", 
    "128GB", 
    "256GB" 
  ], 
  "colours": [ 
    "Gold", 
    "Silver", 
    "Pink", 
    "Black" 
  ], 
  "terms": [ 
    { 
      "instalment_full_price": "49$/month", 
      "instalment_price": 49, 
      "price": 7995 
    } 
  ] 
} 
] 
 
const newArr = arr.sort((a,b) => a.terms[0].price > b.terms[0].price) 
console.log(newArr)

READ ALSO
Создание директив в Angular 4

Создание директив в Angular 4

Недавно начал учить Angular4Почему при создании своих атрибутивных директив необходимо в конструкторе указывать private в параметрах? Например:

293
Влияет ли на Seo смена title и url посредством pushState?

Влияет ли на Seo смена title и url посредством pushState?

ЗдравствуйтеНашел на гитхабе плагин который добавляет к блокам title, url, description и keywords

178
Выделение районов области в google maps

Выделение районов области в google maps

Добрый день, обладает ли кто-нибудь информацией о том, как можно выделить район областиВыделение областей описано в API, а выделение районов...

272