javascript - 如何按多个字段对对象数组进行排序?

标签 javascript arrays sorting

从这里original question ,我将如何对多个字段应用排序?

使用这种稍微调整过的结构,我将如何对城市(升序)和价格(降序)进行排序?

var homes = [
    {"h_id":"3",
     "city":"Dallas",
     "state":"TX",
     "zip":"75201",
     "price":"162500"},
    {"h_id":"4",
     "city":"Bevery Hills",
     "state":"CA",
     "zip":"90210",
     "price":"319250"},
    {"h_id":"6",
     "city":"Dallas",
     "state":"TX",
     "zip":"75000",
     "price":"556699"},
    {"h_id":"5",
     "city":"New York",
     "state":"NY",
     "zip":"00010",
     "price":"962500"}
    ];

我喜欢这个事实而不是 answer给出了一个通用的方法。在我计划使用此代码的地方,我将不得不对日期和其他内容进行排序。 “启动”对象的能力似乎很方便,即使不是有点麻烦。

我已经尝试构建这个 answer变成一个很好的通用示例,但我运气不佳。

最佳答案

您可以使用链式排序方法,通过获取值的增量直到它达到不等于零的值。

var data = [{ h_id: "3", city: "Dallas", state: "TX", zip: "75201", price: "162500" }, { h_id: "4", city: "Bevery Hills", state: "CA", zip: "90210", price: "319250" }, { h_id: "6", city: "Dallas", state: "TX", zip: "75000", price: "556699" }, { h_id: "5", city: "New York", state: "NY", zip: "00010", price: "962500" }];

data.sort(function (a, b) {
    return a.city.localeCompare(b.city) || b.price - a.price;
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

或者,使用 es6,简单地:

data.sort((a, b) => a.city.localeCompare(b.city) || b.price - a.price);

关于javascript - 如何按多个字段对对象数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913512/

相关文章:

php - 如何在 javascript 中使用 UTF-8 字符设置 Safari 浏览器标题?

c++ - 将 RGB IplImage 转换为 3 个数组

java - 我怎样才能用数组替换我代码中的 ArrayList 并且它仍然有效?

javascript - 在 WebBrowser 的 DocumentCompleted 事件中操作 DOM 时,由于 jQuery 的 $(document).ready 导致轻微闪烁

javascript - 当appendChild(img)时参数1不是 'Node'类型

javascript - 为什么嵌套数组对象在 react 组件中不起作用

arrays - Scala 中数组的按元素求和

用于具有下一个和上一个函数的图像库的 JavaScript 数组

c++ - 在排序数组 c 之前保留索引

sorting - 对任何类型的列表进行快速排序 | haskell