alex4answ
@alex4answ

Как правильно сортировать объекты js?

Добрый день, есть объект:
var x = {
	0: {id: 0, src: 'image', sort: 1},
  	1: {id: 1, src: 'image', sort: 2},
  	2: {id: 2, src: 'image', sort: 0},
};

Нужно его отсортировать по полю sort:
x.sort(function (a, b) {
  if (a.sort > b.sort) {
    return 1;
  }
  if (a.sort < b.sort) {
    return -1;
  }
  return 0;
});

x.sort - не функция..

Иногда объект не имеет ключей, и тогда он хорошо сортируется, как с этим бороться?
Чтобы и с ключами и без ключей сортировал?

P.S. причина отсутствия ключей - json_encode
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Вам нужно получить массив значений объекта, и там уже сортировать
var x = {
  0: {id: 0, src: 'image', sort: 1},
  	1: {id: 1, src: 'image', sort: 2},
  	2: {id: 2, src: 'image', sort: 0},
};
let values = Object.values(x);
values.sort(function (a, b) {
  if (a.sort > b.sort) {
    return 1;
  }
  if (a.sort < b.sort) {
    return -1;
  }
  return 0;
});


Иногда объект не имеет ключей, и тогда он хорошо сортируется, как с этим бороться?
Чтобы и с ключами и без ключей сортировал?

Сейчас у вас объекты без sort идут в самый конец массива. Если нужно их расположить вначале, то вот так
values.sort(function (a, b) {
  if (!('sort' in a)) return -1;
  if (!('sort' in b)) return 1;
  if (a.sort > b.sort) {
    return 1;
  }
  if (a.sort < b.sort) {
    return -1;
  }
  return 0;
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы