javascript - 按多个属性对数组中的对象进行排序

标签 javascript arrays sorting

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

任何帮助将非常感激,因为我已经用谷歌搜索和修补了几个小时试图解决这个问题。

最佳答案

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

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

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

Updated fiddle .

关于javascript - 按多个属性对数组中的对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624071/

相关文章:

javascript - Mousedown 和 mouseup 同时以 Angular 触发

c - Web 浏览器不解释通过无符号字符数组传递的图像

java - 将数量添加到数组中的多个索引(java)

javascript - 从数组末尾删除第 n 个元素

c++ - 快速排序 - Middle Pivot 实现奇怪的行为

c++ - 如何在 C++ 中对长 vector 使用 std::sort()?

javascript - JavaScript 中 "intersect"两个 JSON 对象数组的公共(public)属性的最佳方法?

闭包中的 Javascript 类库

javascript - 将光标移动到设计模式 iframe 的开头

java - 新手遇到数组问题