Сортировать объект 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))
);
};
}