首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按属性值对对象数组排序

按属性值对对象数组排序
EN

Stack Overflow用户
提问于 2009-06-11 03:59:54
回答 32查看 1.3M关注 0票数 1.6K

我使用AJAX获得了以下对象,并将它们存储在一个数组中:

代码语言:javascript
复制
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属性以升序或降序对对象进行排序?

EN

回答 32

Stack Overflow用户

回答已采纳

发布于 2009-06-11 04:12:36

按价格升序对房屋进行排序:

代码语言:javascript
复制
homes.sort(function(a, b) {
    return parseFloat(a.price) - parseFloat(b.price);
});

或在ES6版本之后:

代码语言:javascript
复制
homes.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));

一些文档可以在here上找到。

对于降序,您可以使用

代码语言:javascript
复制
homes.sort((a, b) => parseFloat(b.price) - parseFloat(a.price));
票数 2K
EN

Stack Overflow用户

发布于 2009-06-11 04:34:00

这是一个更灵活的版本,它允许您创建可重用的排序函数,并按任何字段排序。

代码语言:javascript
复制
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()
)));

票数 710
EN

Stack Overflow用户

发布于 2009-06-11 04:11:09

要对其进行排序,需要创建一个带有两个参数的比较器函数。然后使用该比较器函数调用排序函数,如下所示:

代码语言:javascript
复制
// a and b are object elements of your array
function mycomparator(a,b) {
  return parseInt(a.price, 10) - parseInt(b.price, 10);
}
homes.sort(mycomparator);

如果要升序排序,请切换减号两边的表达式。

票数 146
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/979256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档