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

新手上路,请多包涵

从这个 原始问题,我将如何在多个字段上应用排序?

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

 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"}
 ];

我喜欢这个事实,而不是给出了一个提供一般方法的 答案。在我计划使用此代码的地方,我将不得不对日期和其他事情进行排序。 “启动”对象的能力似乎很方便,如果不是有点麻烦的话。

我试图将这个 答案 构建成一个很好的通用示例,但我运气不佳。

原文由 Mike 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 971
2 个回答

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

 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);

原文由 Nina Scholz 发布,翻译遵循 CC BY-SA 4.0 许可协议

在这里,您可以尝试按多个字段排序的更小更方便的方式!

 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"}
 ];

 homes.sort((a, b)=> {
 if (a.city === b.city){
 return a.price < b.price ? -1 : 1
 } else {
 return a.city < b.city ? -1 : 1
 }
 })

 console.log(homes);

原文由 Ajay Gupta 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题