Javascript:按最低价格排序JSON对象

时间:2014-07-18 11:03:01

标签: javascript json sorting

您好我正在处理一个以最低价格对JSON对象进行排序的函数。

这就是结构的样子

{
"successful": true,
"products": [
{
  "id": "47",
  "name": "HP LP3065",
  "price": "$119.50",
  "description": "",
  "special": false,
  "rating": 0
},
{
  "id": "43",
  "name": "MacBook",
  "price": "$589.50",
  "description": "",
  "thumb": "data/demo/macbook_1.jpg",
  "special": false,
  "rating": 0
 }
]
}

这就是我目前的排序功能的样子

 data.products.sort(function(a, b){
   if (a.price.substr(1, a.price.length) === b.price.substr(1, b.price.length)) {

     if (a.price.substr(1, a.price.length) > b.price.substr(1, b.price.length)) {
        return b;
     }

     return a;
   }   
 });

我所做的当前功能不起作用,你们有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您需要重写比较器以返回数字。 MDN

function price(obj) { //convert obj.price to float
    return parseFloat(obj.price.replace(/[^\.\d]/g, ''));
}

data.products.sort(function(a, b){
   return price(a) - price(b);  
});

答案 1 :(得分:0)

您将价格作为字符串进行比较,这就是您没有得到预期结果的原因。您应该将价格解析为浮点数。

您的substr来电不正确,您指定的长度是一个字符,因为您跳过一个字符。 (但是这不会使调用不按预期进行,因为该方法接受超出范围的值。)。它应该是a.price.substr(1, a.price.length - 1),但您可以跳过第二个参数,将所有字符都放到字符串末尾:a.price.substr(1)

比较数字时,您可以从另一个中减去一个。这将给出sort方法期望的负/零/正结果:

data.products.sort(function(a, b){
  return parseFloat(a.price.substr(1)) - parseFloat(b.price.substr(1));
});