我是 js 新手,尝试按两个字段对对象数组进行排序 - 从第一个属性开始,然后按第二个属性。这两个属性都是数字。
数据是:
var homes = [{
"h_id": "3",
"minimumorder": "12",
"price": "17"
}, {
"h_id": "4",
"minimumorder": "1",
"price": "20"
}, {
"h_id": "5",
"minimumorder": "1",
"price": "18.10"
}
数组中有更多对象,这是一个简化的示例。下面的代码几乎可以让我到达那里,但是对于minimumorder属性,它把12放在1后面而不是6后面:
cmp = function(a, b) {
parseFloat(a);
parseFloat(b);
if (a > b) return +1;
if (a < b) return -1;
return 0;
}
homes.sort(function(a, b) {
return cmp(a.minimumorder,b.minimumorder) || cmp(a.price,b.price)
})
jsFiddle here .
任何帮助将非常感激,因为我已经用谷歌搜索和修补了几个小时试图解决这个问题。
最佳答案
您需要将解析后的值重新分配回a
和b
:
a = parseFloat(a);
b = parseFloat(b);
否则它最终会比较字符串,并且12
在词法上出现在1
之后,就像单词at
出现在a<之后
在字典中。
关于javascript - 按多个属性对数组中的对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624071/