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


当前回答

您可以将JavaScript排序方法与回调函数一起使用:

function compareASC(homeA, homeB)
{
    return parseFloat(homeA.price) - parseFloat(homeB.price);
}

function compareDESC(homeA, homeB)
{
    return parseFloat(homeB.price) - parseFloat(homeA.price);
}

// Sort ASC
homes.sort(compareASC);

// Sort DESC
homes.sort(compareDESC);

其他回答

使用lodash.sortBy(使用commonjs的说明,您也可以将cdn的脚本include标记放在html的顶部)

var sortBy = require('lodash.sortby');
// or
sortBy = require('lodash').sortBy;

降序

var descendingOrder = sortBy( homes, 'price' ).reverse();

升序

var ascendingOrder = sortBy( homes, 'price' );

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

const sort_by=(字段,反转,引物)=>{常量键=引物?函数(x){返回底漆(x[字段])} :函数(x){返回x[字段]};反转=!颠倒1 : -1;返回函数(a,b){返回a=键(a),b=键(b),反转*((a>b)-(b>a));}}//现在您可以随意按任何字段排序。。。const homes=[{h_id:“3”,城市:“达拉斯”,州:“TX”,邮编:“75201”,价格:“162500”},{h_id:“4”,城市“贝弗利山”,州“CA”,邮编“90210”,价格“319250”},{h_id:”5“,城市:”纽约“,州:”NY“,邮编:”00010“,价格:”962500“}];//按价格从高到低排序console.log(homes.sort(sort_by('price',true,parseInt)));//按城市排序,不区分大小写,A-Zconsole.log(homes.sort(sort_by('city',false,(a)=>a.toUpperCase())));

有了ECMAScript 6,StoBor的答案可以更加简洁:

homes.sort((a, b) => a.price - b.price)

对于多数组对象字段的排序。在arrprop数组中输入域名,如[“a”,“b”,“c”]然后传入我们要排序的第二个参数arrsource实际源。

function SortArrayobject(arrprop,arrsource){
arrprop.forEach(function(i){
arrsource.sort(function(a,b){
return ((a[i] < b[i]) ? -1 : ((a[i] > b[i]) ? 1 : 0));
});
});
return arrsource;
}

这是《JavaScript:TheGoodParts》一书中优雅实现的一个略微修改版本。

注意:此版本的by是稳定的。它在执行下一个链式排序时保留第一个排序的顺序。

我给它添加了isAscending参数。还将它转换为ES6标准和作者推荐的“更新”好部件。

您可以按多个财产进行升序排序、降序排序和链式排序。

const by=函数(name,minor,isAscending=true){constreverseMultliplier=isAscending?1 : -1;返回函数(o,p){设a,b;let结果;if(o&&p&&typeof o==“object”&&typeof p===“object”){a=o[名称];b=p[名称];如果(a===b){返回minor类型==“函数”?小调(o,p):0;}if(a的类型==b的类型){结果=a<b-1 : 1;}其他{结果=a的类型<b的类型-1 : 1;}返回结果*reverseMultilier;}其他{投掷,投掷{name:“错误”,消息:“按+name排序时需要一个对象”};}};};设s=[{first:“乔”,last:“贝瑟”},{first:“Moe”,last:“Howard”},{first:“Joe”,last:“DeRita”},{first:“Shemp”,last:“Howard”},{first:“Larry”,last:“Fine”},{第一个:“卷毛”,最后一个:“霍华德”}];//排序方式:第一个升序,最后一个升序s.sort(按(“first”,按(“last”)));console.log(“排序方式:第一个升序,最后一个升序:”,s);//"[//{“第一”:“卷毛”,“最后”:“霍华德”},//{“第一”:“乔”,“最后”:“贝瑟”}<======//{“第一”:“乔”,“最后”:“德丽塔”}<======//{“第一”:“拉里”,“最后”:“好”},//{“第一”:“莫”,“最后”:“霍华德”},//{“first”:“Shemp”,“last”:”Howard“}// ]//排序方式:第一个升序,最后一个降序s.sort(按(“first”,按(“last”,0,false)));console.log(“排序方式:第一个升序,最后一个降序:”,s);//"[//{“第一”:“卷毛”,“最后”:“霍华德”},//{“第一”:“乔”,“最后”:“德丽塔”}<========//{“第一”:“乔”,“最后”:“贝瑟”}<========//{“第一”:“拉里”,“最后”:“好”},//{“第一”:“莫”,“最后”:“霍华德”},//{“first”:“Shemp”,“last”:”Howard“}// ]