2016-10-20 4 views
1

У меня есть большой объект, который мне нужно отсортировать по значению, поэтому он указан в порядке убывания (диапазон 7-2). На данный момент я не уверен, что действительно обрабатывает порядок сортировки, это кажется мне довольно случайным, хотя я предполагаю, что есть некоторая логика.Переупорядочивание объекта по целочисленному значению

Вот пример подмножество данных:

property_list = { 
    1 : { 
     description : '...', 
     specs : { 
      bedroom_number: 7 
     } 
    }, 
    2 : { 
     description : '...', 
     specs : { 
     bedroom_number: 3 
     } 
    }, 
    3 : { 
     description : '...', 
     specs : { 
      bedroom_number: 5 
     } 
    } 
} 

Так что мне нужно, чтобы изменить порядок по specs.bedroom_number так, что они устраивают, как 7, 5, 3 с точки зрения стоимости номера спальни.

Возможно ли такое сортирование? Или требуется какой-то цикл для работы через объект и добавить каждый объект к новому набору данных?

+1

Объекты не имеют порядок. Вы можете сортировать * ключи * объекта в массиве, используя или хранить свои данные в массиве вместо объекта. –

+0

@MikeC Так что это возможно только с массивом? Как выполняется упорядочение с помощью массива? – user1486133

+1

Если у вас есть их в массиве, вы можете использовать функцию ['sort'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort). Передайте ему свою собственную функцию сортировки, чтобы сравнить значения 'spec.bedroom_number'. Ссылка, которую я опубликовал, показывает пример того, как написать свою собственную функцию сортировки. –

ответ

2

Вы можете создать новый массив объектов из вашей переменной property_list, а затем сортировать по specs.bedroom_number с использованием Array.prototype.sort():

var property_list = {1: {description: '...',specs: {bedroom_number: 7}},2: {description: '...',specs: {bedroom_number: 3}},3: {description: '...',specs: {bedroom_number: 5}}}, 
 
    arr = Object 
 
     .keys(property_list) 
 
     .map(function (key) { 
 
      return property_list[key]; 
 
     }) 
 
     .sort(function (a, b) { 
 
      return b.specs.bedroom_number - a.specs.bedroom_number; 
 
     }); 
 

 
console.log(arr);

+0

Спасибо! Это работает :) – user1486133

+0

Так рад помочь –

Смежные вопросы