对象值按累积顺序排序

时间:2019-01-02 14:16:35

标签: javascript angularjs

我一直在尝试按特定顺序对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 :(得分:2)

您需要使用对象的属性进行排序。

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; }

答案 1 :(得分:0)

必须将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);