所以我试图用基于对象值的对象对数组进行排序。
var mostCheapHistory [ { lowestTitle: title goes here, lowestPrice: 100 }, another obj, another, another } ]
我想根据价格对它们进行分类,所以我想出了这个:
var historyObj = mostCheapHistory[0];
for(var y in mostCheapHistory){
nextObj = mostCheapHistory[y];
console.log('Is '+ historyObj.lowestPrice + ' more as ' + nextObj.lowestPrice + ' ?');
console.log(historyObj.lowestPrice > nextObj.lowestPrice);
console.log('-----')
}
这是输出......
Is 124.98 more as 124.98 ?
false
-----
Is 124.98 more as 18.59 ?
false
-----
Is 124.98 more as 25.9 ?
false
-----
Is 124.98 more as 26.99 ?
false
-----
Is 124.98 more as 34.76 ?
false
-----
到底是怎么回事?显而易见的是,124.98更多是34.76而它却给出了假的吗?
使用以下代码制作数组:
for(var x=0; x < items.length; x++){
var title = items[x].title[0];
var price = items[x].sellingStatus[0].currentPrice[0].__value__;
var item =
{
lowestPrice : price,
lowestTitle : title
}
if(x === 0){
mostCheapHistory.push(item);
}
else{
for(var y=0; y < mostCheapHistory.length; y++){
if(mostCheapHistory[y].lowestPrice > price ){
if(mostCheapHistory.length < 5){
mostCheapHistory.push(item);
break;
}
else{
mostCheapHistory[y] = item;
break;
}
}
}
}
}
答案 0 :(得分:2)
使用预定义的排序功能:
mostCheapHistory.sort(function(a,b){
return a.lowestPrice - b.lowestPrice;
}
+您的代码可能是推送字符串而不是数字,这解释了为什么124.98 > 34.76 => true
但'124.98' > '34.76' => false
,因为字符串'34 .76'在字符串比较中大于'124.98'。
使用parseFloat()获取价格,然后再次检查。
答案 1 :(得分:2)
看起来,您正在比较字符串而不是数值。如果你说(在评论中),那就是排序功能
array.sort((a, b) => a.lowestPrice - b.lowestPrice);
解决了您的问题,然后此排序回调使用隐式转换来使用减号-
运算符进行编号。
结果是一个排序数组,其值为字符串。
答案 2 :(得分:0)
您可以使用Array.prototype.sort()(See MDN documentation)
根据价格对这些进行排序e.g。
var data = [
{
title: "title1",
value: 123
},
{
title: "title2",
value: 324
},
{
title: "title3",
value: 142
}];
var sorted = data.sort(function(a, b) {
return a.value > b.value;
});
答案 3 :(得分:0)
我认为lowestPrice的类型是字符串而不是float,使用parseFloat(historyObj.lowestPrice)来比较这两个值