2015-07-03 3 views
3

У меня есть массив, который содержит значение, как это:Получение неожиданного результата при сортировке с нулем в JavaScript

var testSorting = [0,null,1,0,1,null]; 

Когда я сортировать это так:

testSorting.sort() 

то выход [0, 0, 1, 1, null, null]

Но если я сделаю это вот так:

testSorting.sort(function(a, b){ 
    return a-b; 
}); 
console.log(testSorting); 

выход [0, null, 0, null, 1, 1].

Я не знаю, почему результат такой. Мне нужен результат, похожий на первый метод.

ответ

2

null принуждают к 0 в математических операциях и в строку "null" в .toString() операции, которая является то, что происходит, когда вы не обеспечивают функцию обратного вызова.

Таким образом, в первом коде, это как если бы вы сортировкой это:

['0','null','1','0','1','null'] 

И во-вторых, это как если бы вы сортировкой это:

[0,0,1,0,1,0]; 

Если вам нужно это должно быть как первое, тогда вам нужно убедиться, что значения a===null всегда возвращают значение выше других чисел, а значения b===null всегда возвращают один ниже.

var testSorting = [0,null,1,0,1,null]; 
 

 
testSorting.sort(function(a, b){ 
 
    return a === null ? Infinity : 
 
      b === null ? -Infinity : 
 
         a - b; 
 
}); 
 
document.querySelector("pre").textContent = JSON.stringify(testSorting, 2, null);
<pre></pre>

+0

Yuppy он работает. Большое спасибо – htoniv

+0

Добро пожаловать. –