通过嵌套属性对JSONarray进行排序

时间:2017-08-16 00:16:16

标签: javascript json sorting

我正在尝试排序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提供解决方案。

2 个答案:

答案 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);