2017-04-13 110 views
1

我有一個Json數據,需要在顯示它之前進行排序。我的Json如下。我需要根據ColumnLocation對它們進行排序。根據字段對Json數據進行排序

[{ 
    "Name": "PieChart", 
    "Id": "1", 
    "ColumnLocation": "0", 
    "RowLocation": "0" 
}, { 
    "Name": "Calendar", 
    "Id": "2", 
    "ColumnLocation": "1", 
    "RowLocation": "0" 
}, { 
    "Name": "FavouriteFilter", 
    "Id": "3", 
    "ColumnLocation": "2", 
    "RowLocation": "0" 
}, { 
    "Name": "FilterResults", 
    "Id": "4", 
    "ColumnLocation": "0", 
    "RowLocation": "1" 
}, { 
    "Name": "Watched", 
    "Id": "5", 
    "ColumnLocation": "1", 
    "RowLocation": "1" 
}] 

即數組排序應該有以下方式

col : 0, row 0 
col : 0, row 1 
col : 1, row 0 
col : 1, row 1 
+0

看不到任何json,只是「以下列方式的項目」。然而,這種方法是,從JSON轉換爲JS對象/數組/無論它們是什麼,運行你的排序(取決於你的JSON變成什麼),並且你去了。 JSON只是一個字符串,要應用典型的排序規則,您必須將其轉換(JSON.parse)。 –

+0

@TimConsolazio對不起剛添加了Json。 – indra257

+0

在下面發表了答案。 –

回答

1

無需lodash /下劃線的項目。您可以使用Array.prototype.sort: 由於您的值是字符串,必須首先分析它們成數字,然後比較:

let a = [{"Name":"PieChart","Id":"1","ColumnLocation":"0","RowLocation":"0"},{"Name":"Calendar","Id":"2","ColumnLocation":"1","RowLocation":"0"},{"Name":"FavouriteFilter","Id":"3","ColumnLocation":"2","RowLocation":"0"},{"Name":"FilterResults","Id":"4","ColumnLocation":"0","RowLocation":"1"},{"Name":"Watched","Id":"5","ColumnLocation":"1","RowLocation":"1"}] 
 

 
let sorted = a.sort((a, b) => parseInt(a.ColumnLocation) - parseInt(b.ColumnLocation)); 
 

 
console.log(sorted);

+0

確實,這是比較好的設計函數(減法返回一個數字數據類型)(+1)。 – trincot

0

簡短而親切。

let arr = [{"Name":"PieChart","Id":"1","ColumnLocation":"0","RowLocation":"0"},{"Name":"Calendar","Id":"2","ColumnLocation":"1","RowLocation":"0"},{"Name":"FavouriteFilter","Id":"3","ColumnLocation":"2","RowLocation":"0"},{"Name":"FilterResults","Id":"4","ColumnLocation":"0","RowLocation":"1"},{"Name":"Watched","Id":"5","ColumnLocation":"1","RowLocation":"1"}] 

arr.sort ((a, b) => { return parseInt (a.ColumnLocation) > parseInt (b.ColumnLocation) }); 

console.log (arr); 

需要注意的是,如果你不轉換爲數字,該排序可以不是你所期望的。

+0

這種排序可能是不穩定的:你提供給sort的比較函數應該返回一個可以是負數,零或正數的數字,但是這個函數返回一個布爾值,所以不會是負值。 – trincot

+0

原始值沒有問題,因爲它們在相等時不可區分。但總的來說,最好是像接受的答案那樣進行減法,因爲它會導致穩定的排序(如果可以區分與排序條件相等的值,則「穩定」僅具有含義,但還有其他屬性可用於製作區別)。這是最佳實踐的問題。 – trincot

+0

所以在這種用法中,排序沒有任何問題。謝謝。 –

相關問題