我正在尝试排序JSON值的数组,但要排序的属性嵌套在JSON对象中。对于此示例,将使用data.nested-name完成排序。
我尝试使用https://stackoverflow.com/a/8175221/2053159但没有取得任何成功。
[
{
name: 'a75',
data: {nested-name:"zz\, Hello// There="}},
{
name: 'z32',
data: {nested-name:"aa\, Hello// There="}},
];
预期输出 - >
[
{
name: 'a75',
data: {nested-name:"aa\, Hello There="}},
{
name: 'z32',
data: {nested-name:"zz\, Hello There="}},
];
嵌套名称包含许多后退和正斜杠以及其他特殊字符。 我不使用外部库,请使用本机JavaScript提供解决方案。
答案 0 :(得分:3)
假设arr是你的数组,你可以这样排序:
arr.sort( ( a, b ) => a.data[ "nested-name" ] > b.data[ "nested-name" ] )
要获得更高的字符串计算准确度,您可以使用localeCompare
arr.sort( ( a, b ) => a.data[ "nested-name" ].localeCompare(b.data[ "nested-name" ]) )
答案 1 :(得分:1)
array.sort
函数采用可选参数function(a,b)
,必须根据比较返回-1, 0, or 1
。
您的数据定义包含错误nested-name:"zz\, Hello// There="
。如果您使用-
,则必须引用该名称
工作样本在这里。
var arr=[
{
name: 'a75',
data: {'nested-name':"zz\, Hello// There="}},
{
name: 'z32',
data: {'nested-name':"aa\, Hello// There="}},
];
var result=arr.sort(function(a,b){
return a.data["nested-name"] > b.data["nested-name"];
});
console.log(result);