2017-04-13 119 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

所以在这种用法中,排序没有任何问题。谢谢。 –

相关问题