如何根据JavaScript中的对象值对数组进行排序?
我有一个对象结果集。它具有以下记录如何根据JavaScript中的对象值对数组进行排序?
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)
{0: "C", 1: "37.01", 2: "0,0,0,0,0,0,0,0,0,0,0,0"}
{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: "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"}
我试着做一些对象从URL下面的排序机制。但不会为我工作。
您不能对一个字符串,只是解析为浮动,然后可以比较
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;
}
}
看起来不错,有效。你使用'=='?我会建议使用'===',因为我们比较原始数据;大多数linting工具会在这里抱怨 – yangmillstheory
你试图将一个字符串有排序。
你应该分析的价值和不喜欢它,
resultset.sort(function(a, b){
return parseFloat(b[1]) - parseFloat(a[1]);
});
我认为这是相反的预期顺序(应该是'parseFloat(b [ 1]) - parseFloat(a [1])'),但它是一个流畅的实现。 – yangmillstheory
@yangmillstheory糟糕.. Tq注意..更新了代码。 – choz
@Tushar包括我预期的输出,你可以得到我的问题吗? – Dhinakar
鉴于您正在排序的字段是以%字符结尾的字符串,您的排序函数需要将值转换为数字排序的数字。使用parseFloat(),它会自动忽略%。 – nnnnnn
@nnnnnn我可以将其转换为数字。这不是一个问题。即使我改变我也无法做到这一点。这是我的问题。 :( – Dhinakar