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


当前回答

你需要两个功能

function desc(a, b) {
 return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
}

function asc(a, b) {
  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
}

然后可以将其应用于任何对象属性:

 data.sort((a, b) => desc(parseFloat(a.price), parseFloat(b.price)));

让数据=[{label:“一”,值:10},{label:“two”,值:5},{label:“three”,值:1},];//排序函数函数desc(a,b){返回b<a-1:b>a?1:b>=a?0:NaN;}函数asc(a,b){返回a<b-1:a>b?1:a>=b?0:NaN;}//描述(DESC)data.sort((a,b)=>desc(a.value,b.value));document.body.insert相邻HTML('之前','<strong>DESC排序</strong><pre>'+JSON.stringify(数据)+'</pre>');//美国科学院data.sort((a,b)=>asc(a.value,b.value));document.body.insert相邻HTML('之前','<strong>ASCending sorted</strong><pre>'+JSON.stringify(数据)+'</pre>');

其他回答

使用此函数

const r_sort = (a, b, field, asc) => {
    let reverse = asc ? 1 : -1;
    if (a[field] > b[field]) {
        return 1 * reverse;
    }
    else if (b[field] > a[field]) {
        return -1 * reverse;
    }
    else {
        return 0;
    } }

//用法:

homes = homes.sort((a,b) => r_sort(a,b,price,true)) // true for ascending and false for descending

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

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

注意localCompare不区分大小写

如果不想使用任何sort()方法,可以使用以下方法

函数sortObj(obj){设numArr=[]//仅包含价格作为Number的数组让sortedObj=[];对象映射((x)=>{numArr.push(数字(x[“价格”]));});而(numArr.length>0){让minIndex=numArr.indexOf(数学最小(…numArr))//obj最便宜的住宅指数numArr.拼接(最小索引,1);排序对象推送(对象拼接(minIndex,1));//将最便宜的家庭从Homes Array拼接到sortedObj Array。}console.log(sortedObj);}var家=[{h_id:“3”,城市:“达拉斯”,状态:“TX”,邮编:“75201”,价格:“162500”,},{h_id:“4”,城市:“贝弗利山”,状态:“CA”,邮编:“90210”,价格:“319250”,},{h_id:“5”,城市:“纽约”,州:“NY”,邮编:“00010”,价格:“962500”,},];sortObj(家);

价格降序:

homes.sort((x,y) => {return y.price - x.price})

价格升序:

homes.sort((x,y) => {return x.price - y.price})

你想用Javascript对它进行排序,对吗?您需要的是sort()函数。在这种情况下,您需要编写一个比较器函数,并将其传递给sort(),因此如下所示:

function comparator(a, b) {
    return parseInt(a["price"], 10) - parseInt(b["price"], 10);
}

var json = { "homes": [ /* your previous data */ ] };
console.log(json["homes"].sort(comparator));

比较器从数组中的每一个嵌套散列中选取一个,并通过检查“price”字段来决定哪个散列更高。