按属性值对对象数组进行排序
按属性值对对象数组进行排序
我使用 AJAX 获取了以下对象,并将它们存储在一个数组中:
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": "5", "city": "New York", "state": "NY", "zip": "00010", "price": "962500" } ];
我该如何创建一个函数来仅使用 JavaScript 按升序或降序排序对象的price
属性?
admin 更改状态以发布 2023年5月22日
以下是一个更灵活的版本,它允许你创建可重复使用的排序函数,并按任何字段进行排序。
const sort_by = (field, reverse, primer) => { const key = primer ? function(x) { return primer(x[field]) } : function(x) { return x[field] }; reverse = !reverse ? 1 : -1; return function(a, b) { return a = key(a), b = key(b), reverse * ((a > b) - (b > a)); } } //Now you can sort by any field at will... const 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:"5",city:"New York",state:"NY",zip:"00010",price:"962500"}]; // Sort by price high to low console.log(homes.sort(sort_by('price', true, parseInt))); // Sort by city, case-insensitive, A-Z console.log(homes.sort(sort_by('city', false, (a) => a.toUpperCase() )));
按照价格以升序对房屋进行排序:
homes.sort(function(a, b) { return parseFloat(a.price) - parseFloat(b.price); });
或者在 ES6 版本之后:
homes.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
一些文档可以在这里找到。
对于降序排序,你可以使用
homes.sort((a, b) => parseFloat(b.price) - parseFloat(a.price));