我一直在尝试按特定顺序对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
的错误不是函数。无论如何,可以对对象数组进行排序。
答案 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);