如何在JavaScript中基于对象值对数组排序?
我有一个对象结果集。它有以下记录如何在JavaScript中基于对象值对数组排序?,javascript,jquery,sorting,object,Javascript,Jquery,Sorting,Object,我有一个对象结果集。它有以下记录 var resultset = [{0: "A", 1: "25.14", 2: "0,0,0,0,30.79,0,7.68,0,0,6.13,0,0"}, {0: "B", 1: "3.26", 2: "0,0,0,31,0,0,0,0,0,0,0,0"}, {0: "C", 1: "37.01", 2: "0,0,0,0,0,0,0,0,0,0,0,0"}, {0: "D", 1: "1.18", 2: "0,0,0,9.63,0,0,0,0,0,0
var resultset = [{0: "A", 1: "25.14", 2: "0,0,0,0,30.79,0,7.68,0,0,6.13,0,0"},
{0: "B", 1: "3.26", 2: "0,0,0,31,0,0,0,0,0,0,0,0"},
{0: "C", 1: "37.01", 2: "0,0,0,0,0,0,0,0,0,0,0,0"},
{0: "D", 1: "1.18", 2: "0,0,0,9.63,0,0,0,0,0,0,0,0"},
{0: "E", 1: "0.28", 2: "0,0,0,13.22,0,0,0,0,0,0,0,0"}]
我曾经根据值对这个对象进行排序,即使用下面的代码对索引1进行排序
resultset.sort(compareSecondColumn);
function compareSecondColumn(a, b) {
//alert("A Value -->"+a[1]);
//alert("B Value -->"+b[1]);
if (a[1] == b[1]) {
return 0;
}
else {
//alert(b[1]);
return (a[1] > b[1]) ? -1 : 1;
}
}
但我无法根据索引1进行排序
我的预期输出如下,根据索引1(37.01)排序
我试着从下面的URL做一些对象排序机制。但对我不起作用
您不能对字符串进行排序,只需将其解析为float,然后进行比较
function compareSecondColumn(a, b) {
var valueA = parseFloat(a[1]);
var valueB = parseFloat(b[1]);
if (valueA == valueB) {
return 0;
} else {
return (valueA > valueB) ? -1 : 1;
}
}
您正在尝试对字符串进行排序 您应该解析该值并像
resultset.sort(function(a, b){
return parseFloat(b[1]) - parseFloat(a[1]);
});
@Tushar包含了我的预期输出,你能得到我的问题吗?如果你正在排序的字段是一个以%字符结尾的字符串,那么你的排序函数需要将值转换为数字进行数字排序。使用parseFloat(),它将自动忽略%。@nnnn我可以将其转换为数字。这不是问题。即使我改变了我也不能做那种事。这是我的问题(这对我来说非常困难。排序有那么困难吗?我们有成千上万的排序问题,所以,即使搜索也很困难。看起来不错,很有效。但是为什么要使用
==
?我建议使用==
,因为我们在比较原语;大多数linting工具都会对此表示不满。我认为这与预期的顺序相反r(应该是parseFloat(b[1])-parseFloat(a[1])
),但它是一个平滑的实现。@yangmills理论Oops..Tq用于注意..更新了代码。
resultset.sort(function(a, b){
return parseFloat(b[1]) - parseFloat(a[1]);
});