我是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"
}
数组中有更多对象,这是一个简化的示例。下面的代码ALMOST让我到达那里,但是对于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
之后。Updated fiddle。