Сортировка значений объекта в порядке перестановки - PullRequest
0 голосов
/ 02 января 2019

Я пытался отсортировать массив объектов ответа json в определенном порядке, например, если объект содержит Umlaute слова / символы

object {
  item: 1,
  users: [
   {name: "A", age: "23"}, 
   {name: "B", age: "24"},
   {name: "Ä", age: "27"}
 ]
}

Ожидаемая сортировка имен: A, Ä и B.

при попытке сортировки с помощью localecompare ().

object.sort(function (a, b) { return a.localeCompare(b); });

Получение ошибки типа object.sort не является функцией. Есть ли в любом случае сортировать массив объектов.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Вы должны применить функцию sort() к массиву, а не к внешнему объекту.У объектов нет такого метода, и в общем случае порядок ключей в любом случае не гарантирован.Для «упорядоченных» данных всегда используйте массивы, а не объекты!

В этом примере используется массив o.users.Вывод n также является массивом.

ПРИМЕЧАНИЕ : никогда не злоупотребляйте зарезервированными ключевыми словами в качестве имен переменных.Вы используете object в качестве имени переменной, настоятельно рекомендуется этого не делать!Я заменил его на o.Хотя object не является зарезервированным ключевым словом, Object (с большой буквы O) является.И эти два легко спутать.

var o = {
  "item": 1,
  "users": [
    { "name": "A", "age": "23" },
    { "name": "B", "age": "24" },
    { "name": "Ä", "age": "27" }
  ]
};

var n = o.users.sort((a, b) => a.name.localeCompare(b.name, "de"));

console.log(n);
0 голосов
/ 02 января 2019

Вам необходимо взять свойство объекта для сортировки.

var object = { item: 1, users: [{ name: "A", age: "23" }, { name: "B", age: "24" }, { name: "Ä", age: "27" }] };

object.users.sort(function (a, b) { return a.name.localeCompare(b.name); });

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...