Как отсортировать массив списка объектов в javascript? [Дубликат]

1

У меня есть массив, который имеет список объектов. Изображение 174551

каждое значение массива выглядит следующим образом: Изображение 174551

Я хочу сортировать имя: elements[ele].options.name.

это то, что я пытаюсь сделать, но не работаю для меня

           var sortedElements = elements.sort(function (a, b) {
                return a.options.name - b.options.name
            });
            for (var ele in sortedElements) {
                if (sortedElements.hasOwnProperty(ele)) {
                    if (!sortedElements[ele].options.outOfNetworkFlag) {
                        if (sortedElements[ele].options.category === "person") {
                            assignCount++
                        }
                        if (sortedElements[ele].options.category === "unknown") {
                            unassignCount++
                        }
                    }
                    else {
                        oonCount++;
                    }

                    occupancylist += '<a href="#" class="elementLink"><li style="list-style: none" data-elementid="' + sortedElements[ele].options.elementId + '">' + sortedElements[ele].options.icon.options.html + ' ' + sortedElements[ele].options.name + '</li></a>';
                }
            }

Пожалуйста, предложите.

  • 1
    Вы не можете вычесть строку из другой строки. Чтобы сравнить строки, используйте .localeCompare() : return a.options.name.localeCompare(b.options.name);
  • 0
    Спасибо Pointy, это работает на 100%
Показать ещё 3 комментария
Теги:
arrays
sorting

3 ответа

3

Вы можете использовать функцию сортировки

  var items = [
      { name: 'saurabh'},
      { name: 'hello'},
      { name: 'jsbee'},
      { name: 'abc'}
    ];

    // sort by name
    items.sort(function(a, b) {
      var nameA = a.name.toUpperCase(); // ignore upper and lowercase
      var nameB = b.name.toUpperCase(); // ignore upper and lowercase
      if (nameA < nameB) {
        return -1;
      }
      if (nameA > nameB) {
        return 1;
      }

      // names must be equal
      return 0;
    });
2

Используйте функцию sort следующим образом:

objs.sort((a,b) => (a.options.name > b.options.name) ? 1 : ((b.options.name > a.options.name) ? -1 : 0)); 

Конечно, вы можете использовать toUpperCase() (или ниже) в функции сортировки.

objs.sort((a,b) => (a.options.name.toUpperCase() > b.options.name.toUpperCase()) ? 1 : ((b.options.name.toUpperCase() > a.options.name.toUpperCase()) ? -1 : 0)); 
1

Вы должны просто использовать Array.prototype.sort

let src = [{options: {name: 'bbb'}}, {options: {name: 'aaa'}}]
 
src.sort((a, b) => a.options.name > b.options.name ? 1 : -1)

console.log(src);
  • 3
    Нет, это не правильно. Компаратор сортировки должен возвращать число , а не логическое значение.
  • 0
    Помимо исправления ответа, чтобы он не был неправильным, этот ответ также нуждается в объяснении.
Показать ещё 11 комментариев

Ещё вопросы

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