Сортировать объект JavaScript по атрибуту

Я пытаюсь отсортировать массив объектов комментариев по их атрибуту "body".

Я пытаюсь запустить следующее (console.log(комментарий) успешно показывает массив), но когда я собираюсь отсортировать его, я просто получаю тот же массив обратно - даже после определения его как sortedArray переменная.

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

Ниже мой код:

function sortComments() {
  $("#sort_comments").on("click", function(e) {
    e.preventDefault();
    var id = this.dataset.linkid
    fetch(`/links/${id}/comments.json`)
      .then(r => r.json())
      .then(comments =>
        comments.sort(function(a, b) {
          return a.body - b.body;
        })
      );
  });
}

Спасибо за помощь.

1 ответ

Решение

Вероятно, здесь происходит то, что body Атрибут является строкой, а не числом, поэтому результат этого вычитания возвращает NaNи если это так, то порядок Array не изменится

Для сравнения 2 разных строк вы, вероятно, хотите использовать localeCompare, как это:

function sortComments() {
    $("#sort_comments").on("click", function (e) {
        e.preventDefault();
        var id = this.dataset.linkid
        fetch(`/links/${id}/comments.json`)
          .then(r => r.json())
          .then(comments => 
             comments.sort(({body: a}, {body: b}) => a.localeCompare(b))
          );
    };
}
Другие вопросы по тегам