2017-08-16 114 views
0

我想排序JSON值的数组,但排序的属性嵌套在JSON对象内。对于这个例子,排序是使用data.nested-name完成的。通过嵌套属性排序JSONarray

我试过使用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.sort((a, b) => a.data[ "nested-name" ] > b.data[ "nested-name" ]) 

对于更高的字符串compairison准确性您可以使用localeCompare

arr.sort((a, b) => a.data[ "nested-name" ].localeCompare(b.data[ "nested-name" ])) 
+0

我怎样才能忽略大小写? – NewBee

+2

@NewBee添加'toLowerCase()' –

+2

'=> a.data [“nested-name”] .toLowerCase()> b.data [“嵌套名称”] .toLowerCase()' - 或使用'=> a .data [“嵌套名称”]。localeCompare(b.data [“嵌套名称”])' –

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

+0

我该如何忽略区分大小写? – NewBee