Сортировка 2-мерных массивов, содержащих числа и строки

1

У меня есть инвентарь, как показано ниже.

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;
}

Есть ли проблема с моим кодом? Также есть лучший способ сортировать многомерные массивы с различными типами объектов?

  • 1
    Это не пузырьковая сортировка. Начальное значение внутреннего цикла должно быть: for (var j=i+1; ...
  • 0
    Возможная альтернатива: stackoverflow.com/questions/4907683/…
Показать ещё 1 комментарий
Теги:
arrays
multidimensional-array

1 ответ

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

Вы можете использовать метод сборки 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>');
  • 0
    Просто несколько сомнений ... Что такое а и б здесь. Это два элемента массива в порядке?
  • 1
    a и b являются элементами внешнего массива, например, он сравнивает [21, "Bowling Ball"] с [2, "Dirty Sock"] . для результата вам нужно получить доступ ко второму элементу внутреннего массива с индексом.

Ещё вопросы

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