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

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

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

使用这种稍微调整的结构,我将如何排序城市(上升)&然后价格(下降)?

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

我喜欢事实甚于回答提供了一种通用的方法。在我计划使用这段代码的地方,我必须对日期和其他事情进行排序。“优化”对象的能力似乎很方便,如果不是有点麻烦的话。

我试过建造这个回答一个很好的通用例子,但我运气不太好。


扬帆大鱼
浏览 1519回答 4
4回答

HUWWW

对于非一般的、简单的解决您的确切问题的解决方案:homes.sort(    function(a, b) {                 if (a.city === b.city) {          // Price is only important when cities are the same          return b.price - a.price;       }       return a.city > b.city ? 1 : -1;    });

慕尼黑5688855

这里有一个简单的函数方法。使用数组指定排序顺序。预备减若要指定降序,请执行以下操作。var&nbsp;homes&nbsp;=&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;{"h_id":"3",&nbsp;"city":"Dallas",&nbsp;"state":"TX","zip":"75201","price":"162500"}, &nbsp;&nbsp;&nbsp;&nbsp;{"h_id":"4","city":"Bevery&nbsp;Hills",&nbsp;"state":"CA",&nbsp;"zip":"90210",&nbsp;"price":"319250"}, &nbsp;&nbsp;&nbsp;&nbsp;{"h_id":"6",&nbsp;"city":"Dallas",&nbsp;"state":"TX",&nbsp;"zip":"75000",&nbsp;"price":"556699"}, &nbsp;&nbsp;&nbsp;&nbsp;{"h_id":"5",&nbsp;"city":"New&nbsp;York",&nbsp;"state":"NY",&nbsp;"zip":"00010",&nbsp;"price":"962500"} &nbsp;&nbsp;&nbsp;&nbsp;];homes.sort(fieldSorter(['city',&nbsp;'-price']));//&nbsp;homes.sort(fieldSorter(['zip',&nbsp;'-state',&nbsp;'price'])); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;alternativefunction&nbsp;fieldSorter(fields)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function&nbsp;(a,&nbsp;b)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fields&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.map(function&nbsp;(o)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;dir&nbsp;=&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(o[0]&nbsp;===&nbsp;'-')&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir&nbsp;=&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o=o.substring(1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a[o]&nbsp;>&nbsp;b[o])&nbsp;return&nbsp;dir; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(a[o]&nbsp;<&nbsp;b[o])&nbsp;return&nbsp;-(dir); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.reduce(function&nbsp;firstNonZeroValue&nbsp;(p,n)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;p&nbsp;?&nbsp;p&nbsp;:&nbsp;n; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;0); &nbsp;&nbsp;&nbsp;&nbsp;};}编辑:在ES6中,它甚至更短!"use strict";const fieldSorter = (fields) => (a, b) => fields.map(o => {&nbsp; &nbsp; let dir = 1;&nbsp; &nbsp; if (o[0] === '-') { dir = -1; o=o.substring(1); }&nbsp; &nbsp; return a[o] > b[o] ? dir : a[o] < b[o] ? -(dir) : 0;}).reduce((p, n) => p ? p : n, 0);const homes = [{"h_id":"3", "city":"Dallas", "state":"TX","zip":"75201","price":162500},&nbsp; &nbsp; &nbsp;{"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}];const sortedHomes = homes.sort(fieldSorter(['state', '-price']));document.write('<pre>' + JSON.stringify(sortedHomes, null, '\t') + '</pre>')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript