我使用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属性按升序或降序对对象进行排序?


当前回答

用于字符串排序,以防有人需要,

常量数据Arr={“您好”:[{“id”:114,“关键字”:“zzzzzz”,“地区”:“斯里兰卡”,“supportGroup”:“administrators”,“category”:“类别2”}, {“id”:115,“关键字”:“aaaaa”,“地区”:“日本”,“supportGroup”:“开发者”,“category”:“类别2”}]};const sortArray=dataArr['hello'];console.log(sortArray.sort((a,b)=>{如果(a.region<b.region)返回-1;如果(a.region>b.region)返回1;返回0;}));

其他回答

这可以通过一个简单的单行值of()排序函数实现。运行下面的代码片段以查看演示。

var家=[{“h_id”:“3”,“城市”:“达拉斯”,“状态”:“TX”,“zip”:“75201”,“价格”:“162500”}, {“h_id”:“4”,“城市”:“贝弗利山”,“状态”:“CA”,“zip”:“90210”,“price”:“319250”}, {“h_id”:“5”,“城市”:“纽约”,“州”:“NY”,“zip”:“00010”,“价格”:“962500”}];console.log(“要首先对降序/最高排序,请使用运算符'<'”);homes.sort(函数(a,b){return a.price.valueOf()<b.price.vvalueOf(;});console.log(homes);console.log(“要首先对升序/最低排序,请使用运算符'>'”);homes.sort(函数(a,b){return a.price.valueOf()>b.price.vvalueOf(;});console.log(homes);

可以使用string1.localeCompare(string2)进行字符串比较

this.myArray.sort((a,b) => { 
    return a.stringProp.localeCompare(b.stringProp);
});

注意localCompare不区分大小写

我参加聚会有点晚了,但下面是我整理的逻辑。

function getSortedData(data, prop, isAsc) {
    return data.sort((a, b) => {
        return (a[prop] < b[prop] ? -1 : 1) * (isAsc ? 1 : -1)
    });
}

更像LINQ的解决方案:

Array.prototype.orderBy = function (selector, desc = false) {
    return [...this].sort((a, b) => {
        a = selector(a);
        b = selector(b);

        if (a == b) return 0;
        return (desc ? a > b : a < b) ? -1 : 1;
    });
}

优势:

财产的自动补全扩展阵列原型不更改数组易于在方法链中使用

用法:

Array.prototype.orderBy=函数(选择器,desc=false){return[…this].sort((a,b)=>{a=选择器(a);b=选择器(b);如果(a==b)返回0;返回(desc?a>b:a<b)-1 : 1;});};var家=[{“h_id”:“3”,“城市”:“达拉斯”,“状态”:“TX”,“zip”:“75201”,“价格”:“162500”}, {“h_id”:“4”,“城市”:“贝弗利山”,“状态”:“CA”,“zip”:“90210”,“price”:“319250”}, {“h_id”:“5”,“城市”:“纽约”,“州”:“NY”,“zip”:“00010”,“价格”:“962500”}];let sorted_homes=homes.orderBy(h=>parseFloat(h.price));console.log(“按价格排序”,sorted_homes);let sorted_homes_desc=homes.orderBy(h=>h.city,true);console.log(“按城市降序排序”,sorted_home_desc);

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

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

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