簡體   English   中英

JS 按 object 屬性排序對象數組(美元)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM