У меня есть инвентарь, как показано ниже.
var arr1 = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];
Я хочу сортировать инвентарь в алфавитном порядке. Я попытался использовать простой способ сортировки пузырьков, чтобы сделать это. Но он показывает ошибку: "wrappedCompareFn не является функцией".
function sort(arr1){
//console.log("works");
for(var i=0;i<arr1.length;i++){
for(var j=0;j<arr1.length;j++){
// console.log(arr1[j][1].localeCompare(arr1[i][1]));
if(arr1[j][1].localeCompare(arr1[i][1])<0){
var tmp=arr1[i][1];
arr1[i][1]=arr1[j][1];
arr1[j][1]=tmp;
}
}
}
return arr1;
}
Есть ли проблема с моим кодом? Также есть лучший способ сортировать многомерные массивы с различными типами объектов?
Вы можете использовать метод сборки Array#sort
с пользовательским обратным вызовом.
Метод
sort()
сортирует элементы массива на месте и возвращает массив. Сорт не обязательно стабильный. Порядок сортировки по умолчанию соответствует строковым кодам Unicode.
var arr1 = [[1, "Hair Pin"], [21, "Bowling Ball"], [2, "Dirty Sock"], [5, "Microphone"]];
arr1.sort(function (a, b) {
return a[1].localeCompare(b[1]);
});
document.write('<pre>' + JSON.stringify(arr1, 0, 4) + '</pre>');
[21, "Bowling Ball"]
с [2, "Dirty Sock"]
. для результата вам нужно получить доступ ко второму элементу внутреннего массива с индексом.
for (var j=i+1; ...