Javascript 如何以“报价”格式将价格作为字符串对集合进行排序;350,40卢比“;

Javascript 如何以“报价”格式将价格作为字符串对集合进行排序;350,40卢比“;,javascript,jquery,Javascript,Jquery,我有一个Javascript数组,对象包含price作为字符串,格式如下: results:[{ image: "http://dummyhost/new3305-82-thumb.jpg", product_title: "Nokia Lumia 1540", price: "Rs. 50,790" }, { image: "http://dummyhost/new3305-82-thumb.jpg", product_title: "Nokia Lumia 1520", price: "Rs

我有一个Javascript数组,对象包含price作为字符串,格式如下:

results:[{
image: "http://dummyhost/new3305-82-thumb.jpg",
product_title: "Nokia Lumia 1540",
price: "Rs. 50,790"
},
{
image: "http://dummyhost/new3305-82-thumb.jpg",
product_title: "Nokia Lumia 1520",
price: "Rs. 37,790"
}]
我知道我们可以使用以下函数原型来使用字符串或整数对值进行排序:

Array.prototype.sortByProp = function(p){
 return this.sort(function(a,b){
  return (a[p] > b[p]) ? 1 : (a[p] < b[p]) ? -1 : 0;
 });
}
Array.prototype.sortByProp=函数(p){
返回此.sort(函数(a,b){
返回(a[p]>b[p])?1:(a[p]

我希望对字符串和整数的组合进行排序,其中我们得到api响应,价格特定于国家货币格式。

您可以将格式为“Rs.50790”
的价格转换为如下数字:

p = "Rs. 50,790";
p = +p.replace(/\D/g,"");
也就是说,执行正则表达式替换以删除字符串中的所有非数字(假设逗号是注释中提到的千位分隔符),然后使用一元加号运算符将结果字符串转换为数字

然后可以使用数值进行排序。不过,我不确定您希望如何将其合并到泛型
sortByProp()
函数中。可能通过添加一个标志来告知属性将被转换为数字:

Array.prototype.sortByProp = function(p,isNumeric){
  return this.sort(function(a,b){
    a = isNumeric ? +a[p].replace(/\D/g,"") : a[p];
    b = isNumeric ? +b[p].replace(/\D/g,"") : b[p];

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

results.sortByProp("price", true);
// or for other fields omit the second parameter or pass in false:
results.sortByProp("product_title");
Array.prototype.sortByProp=函数(p,isNumeric){
返回此.sort(函数(a,b){
a=isNumeric?+a[p]。替换(/\D/g,“”):a[p];
b=isNumeric?+b[p]。替换(/\D/g,“”):b[p];
返回值(a>b)?1:(a
这个怎么样:

Array.prototype.sortByProp = function(p){
    return this.sort(function(a,b){
        console.log(a,b)
        return (parseInt(a['price'].substring(4).replace(',','')) >   parseInt(b['price'].substring(4).replace(',',''))) ? 1 : 0;
     });
}
它采用从位置2开始的子字符串,然后用零替换

parseInt(a['price'].子字符串(4).替换(',','')
您必须用排序方法解析价格

myArray.sort(function(a, b){
    var pA = parseFloat(a["price"].substr(4).replace(",", ""));
    var pB = parseFloat(b["price"].substr(4).replace(",", ""));

    if (pA < pB) return -1;
    if (pA > pB) return 1;
    return 0;
});
myArray.sort(函数(a,b){
var pA=parseFloat(a[“price”].substr(4).替换(“,”,”);
var pB=parseFloat(b[“price”].substr(4).替换(“,”,”);
if(pApB)返回1;
返回0;
});

编辑:这一点很好

是否可以将结果集更改为在单独的属性中使用货币?为每个JSON添加另一个字段,该字段包含价格的整数转换版本,并可能对其进行排序。这是api的响应,我想按原样消费,所以如果我们可以在不引入新字段的情况下对现有集合进行排序会更好。价格中的逗号是千位分隔符还是小数点?逗号是分隔符。逗号会发生什么变化<代码>解析浮点(“37790”)
为37。因此,它对显示的数据“有效”,但一般不起作用。字符串比较检查第一个字符,而不是整个值,因此它对“57790”和“795”不起作用,因此它对显示的数据“有效”,但一般不起作用。@Hacketo-它没有进行字符串比较。正如我在回答中明确提到的,字符串正在使用一元加号运算符转换为数字
+“57790”
返回数字
57790
。尝试在浏览器控制台中键入
+“57790”>+“795”
,看看会发生什么…知道这一点,但在第一条语句中读取+=。我认为这个符号很疯狂。@Hacketo-Well,
p=Number(p.replace(/\D/g,”)以更明显的方式做同样的事情。或者使用
parseFloat()
。但他们更容易打字。。。