我是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

任何帮助将不胜感激,因为我一直在寻找和解决这些问题的过程中花费了数小时的时间。

最佳答案

您需要将解析后的值重新分配回ab

a = parseFloat(a);
b = parseFloat(b);


否则,它最终将比较字符串,并且12出现在1词后,就像单词at出现在字典中的a之后。

Updated fiddle

09-16 13:58