[英]JS order array of objects by object property (dollars)
我花了很長時間才弄清楚這一點。 我的 vuejs 應用程序中有一組對象,如下所示:
var food= [{'name':'apples','price':'222.30'},{'name':'bananas','price':'99.30'},{'name':'oranges','price':'199.30'}];
當我嘗試按價格排序時,我都在嘗試
return food.sort((a, b) => (a.price> b.price) ? 1 : -1);
AND
return _.orderBy(food, 'price')
然而,這似乎將 99.30 美元的價格解釋為高於 222.30 美元——我假設是因為 9 高於 2?
任何幫助,將不勝感激。 我也想知道是否有辦法從大到小排序,反之亦然。
您必須將價格轉換為數字並在排序回調中使用
return food.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
您的代碼的問題是值是字符串。
一個簡單的修復:
return food.sort((a, b) => (parseFloat(a.price) > parseFloat(b.price)) ? 1 : -1);
價格存儲為string
s; 這很難。 它將每個價格作為字符串比較,一次一個字符,從左到右。
考慮轉換為float
並簡化代碼:
return food.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));
只需使用數字
var food= [{'name':'apples','price':'222.30'},{'name':'bananas','price':'99.30'},{'name':'oranges','price':'199.30'}]; food.sort((a, b) => (Number(a.price) > Number(b.price))? 1: -1); console.log(food);
您的排序無法正常工作,因為您將價格作為字符串進行比較
var food= [{'name':'apples','price':'222.30'},{'name':'bananas','price':'99.30'},{'name':'oranges','price':'199.30'}];
function compare( a, b ) {
if ( parseFloat(a.price) < parseFloat(b.price) ){
return -1;
}
if ( parseFloat(a.price) > parseFloat(b.price) ){
return 1;
}
return 0;
}
food.sort( compare );
or
food.sort((a, b) => (parseFloat(a.price) > parseFloat(b.price)) ? 1 : -1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.