Array.sort не переупорядочивает массив со значениями NaN в объекте

1

У меня есть простой случай с переупорядочиванием элементов в массиве с помощью prop minLVL каждого object в нем.

Но по какой-то причине он работает только в том случае, если присутствует предыдущий и следующий реквизиты (так как вы можете видеть, что у каждого object не minLVL поля minLVL). Итак, если minLVL отсутствует в каком-либо объекте, он не переустанавливает такой элемент в нижней части списка, он просто остается в том же положении.

Как я могу это решить? Спасибо

Пример:

 var h = [
        {
            ID: 172
    	},
        {
            ID: 179,
            minLVL: "30"
    	},
        {
            ID: 169
    	},
        {
            ID: 173
    	},
        {
            ID: 167,
            minLVL: "25"
    	},
        {
    		ID: 175,
            minLVL: "10"
    	}
    ]
    
          var n = h.sort((a, b) => Number(b.minLVL) - Number(a.minLVL))
    
    console.log(n)
Теги:
arrays
sorting

1 ответ

1
Лучший ответ

Вы можете по умолчанию использовать эти значения в 0 если они не существуют внутри функции сортировки:

var h = [{
  ID: 172
}, {
  ID: 179,
  minCrimeLevel: "30"
}, {
  ID: 169
}, {
  ID: 173
}, {
  ID: 167,
  minCrimeLevel: "25"
}, {
  ID: 175,
  minCrimeLevel: "10"
}]

var n = h.sort((a, b) => (Number(b.minCrimeLevel) || 0) - (Number(a.minCrimeLevel)|| 0))

console.log(n)
  • 0
    Спасибо. Да, я знаю его. Но это вредит производительности ... Почему JS не делает такие вычисления "под капотом", как с undefined значениями?
  • 1
    @MaxTravis потому что NaN это специальное значение - NaN > 0 , NaN < 0 , и NaN == 0 все оценивается в false , потому что NaN есть (немного парадоксальный) число , но означает значение , которое ... не является число , undefined не относится к номеру типа, поэтому он приводится к единице. Нечего принуждать с NaN .
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню