Я знаю, что ответ на этот вопрос не пропущен, но неся со мной, я пробовал много решений, и мне все еще трудно сортировать двумерный массив по 4-му значению с помощью JavaScript.
Вот как выглядит список (массив может содержать неограниченное количество списков):
colors = [[247, 247, 247, 429, 1], [132, 128, 132, 2, 1], [37, 29, 37, 649, 1]]
выход должен быть:
colors = [[37, 29, 37, 649, 1], [247, 247, 247, 429, 1], [132, 128, 132, 2, 1]]
Вот что я пробовал:
colors.sort(function(a,b){
alert(a[3] - b[3]);
});
Код выше возвращает, NaN
, я не уверен, почему...
Если это может помочь эквивалент python того, чего я пытаюсь достичь, будет:
sorted_colors = sorted(colors(u), key=lambda x: -x[3])
Обратный вызов sort # массива должен возвращать число. Вы не возвращаете результат вычитания, вы просто показываете его с предупреждением. Удалите alert()
и верните b[3] - a[3]
чтобы получить требуемый заказ.
var colors = [[247, 247, 247, 429, 1], [132, 128, 132, 2, 1], [37, 29, 37, 649, 1]];
colors.sort(function(a,b){
return b[3] - a[3];
});
console.log(colors);
Вы почти там. Вам следует рассмотреть возможность просмотра документов Array # sort(). Это не правильный синтаксис.
colors.sort(function(a,b){
alert(a[3] - b[3]);
});
Вы должны вернуть результат не оповещения
colors.sort(function(a,b){
return b[3] - a[3];
});
b[3] - a[3]
.
Поскольку функция в .sort()
требует возврата значения. Вы только предупреждаете о значении.
Вот рабочий пример:
var colors = [[247, 247, 247, 429, 1], [132, 128, 132, 2, 1], [37, 29, 37, 649, 1]],
sorted = colors.sort(function(a, b) { return b[3] - a[3]; }); // DESC
console.log(sorted);
Вы не сравниваете, когда вы пишете предупреждение (...), вы должны вернуть результат, используйте это:
colors.sort(function(a,b){
return b[3] - a[3]; // b - a when you are sorting 9->1, a-b otherwise
});
alert
- плохой инструмент отладки, лучше используйтеconsole
. А поскольку ваша функция сортировки ничего не возвращает, ваш массив вообще не должен сортироваться. Но я не вижу ничего, что напечатало быNaN
в этом коде.