2015-06-29 58 views
0

我有3個Javascript變量與不同的價格。我需要按照從最低到最高的順序對價格進行排序。價格最低的商品會輸出「最低價」,高價商品只會顯示價格的差異。排序一個Javascript數組並獲取號碼差異

例如:

var apple = 2.99; 
var watermelon = 12.99; 
var orange = 4.99; 

這應該然後輸出:

Apple: Lowest, Orange: $2 more, Watermelon: $10 More 

爲了實現這一點,我創建三個對象的陣列。

var item = new Array(); 
item.push({apple:"2.99"}); 
item.push({watermelon:"12.99"});  
item.push({orange:"4.99"}); 

現在我需要以某種方式整理數組,並獲得價格的差異。我怎麼做到這一點?

回答

1

您將需要清理代碼,但這是如何做到你想達到的目的。

JSFiddel:http://jsfiddle.net/2a48yLbg/2/

代碼:

var apple = 2.99; 
var watermelon = 12.99; 
var orange = 4.99; 

var myArray = [{"name":"Oragne", "value":orange}, 
       {"name":"Watermelon", "value":watermelon}, 
       {"name":"Apple", "value":apple}]; 
myArray.sort(function(a, b){ 
       return a.value - b.value; 
      }); 

var lowestObject = myArray[0]; 
var lowestValue = lowestObject.value; 
console.log(lowestValue); 
var printStatement = ""; 

for(var i=0; i < myArray.length; i++) 
{ 
    var printObject = myArray[i]; 
    var partTwo = "" 
    if(i === 0) 
    { partTwo = "lowest, " } else { partTwo = printObject.value - lowestValue + " more, "}; 

    printStatement += printObject.name + " : " + partTwo; 

} 
console.log(printStatement); 
document.getElementById ("content").innerHTML = printStatement; 
2

我不建議使用對象來關聯名稱和價格,因爲要獲得該屬性,您將不得不使用類似Object.keys(obj)[0]這很醜陋的東西。相反,我建議將數據存儲在一組數組中,例如,將名稱存儲在第一位置,將價格存儲在第二位置。

然後,根據價格對數組進行排序,使用map爲每對產生一個字符串,最後連接字符串。

[         // Data 
    ['Apple', 2.99], 
    ['Watermelon', 12.99], 
    ['Orange', 4.99] 
].sort(function(a,b) {    // Sort by price 
    return a[1] - b[1]; 
}).map(function(pair, index, arr) { // Stringify each pair 
    var diff = pair[1] - arr[0][1]; 
    return pair[0] + ': ' + (diff ? '$' + diff + ' more' : 'Lowest'); 
}).join(', ');      // Join the strings 
+0

哦,我真的錯過在JS的聲明'scan'方法... – Bergi

+0

@Bergi什麼是聲明'scan'? – Oriol

+0

'reduce'和'map'之間的混合,參見例如[Haskell之一](http://hackage.haskell.org/package/base-4.8.0.0/docs/Prelude.html#v:scanl)。編輯:甚至有[維基百科文章](https://en.wikipedia.org/wiki/Prefix_sum#Scan_higher_order_function):-) – Bergi

相關問題