2017-08-16 113 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