2016-08-12 57 views
3

假設我有一個JSON對象這樣獲得三個最低值:從Array

{"27":[2300,2300,2700,2300,2300,2300,2500,2300,2700,2300,2300,2300,2700,2300,2700,2300,2300,2300,2300,1900,2700,2300,2300,2300]} 

我想從這個數組得到三個最低值,並將其存儲爲另一個數組。我試過sort(),但經歷過它認爲10000比1300低。

問題:如何從上述JSON對象中獲取三個最低值並將其存儲爲自己的數組?

這是我試圖梳理我的數組:

-prices[searchLog.PriceSearchId].sort(); 
+0

你正確排序,但因爲你沒有張貼你的代碼,我們不能告訴是什麼問題? – adeneo

+2

使用自己的回調函數進行排序 - ES2015 +將會是'array.sort((a,b)=> ab).slice(0,3)' –

+0

請發佈您的代碼 –

回答

5

試試這個。

var prices = { 
 
    "27": [2300, 2300, 2700, 2300, 2300, 2300, 2500, 2300, 2700, 2300, 2300, 2300, 2700, 2300, 2700, 2300, 2300, 2300, 2300, 1900, 2700, 2300, 2300, 2300] 
 
}; 
 
var leastThree = prices["27"].sort(function(a, b) { 
 
    return a - b; 
 
}).slice(0, 3); 
 
console.log(leastThree);

0

既然你想最低值的一個固定數,也沒有必要使用sort(),時間複雜度爲最好O(N * log N)

以下的複雜度爲O(N)

var prices = { 
 
    "27": [2300, 2300, 2700, 2300, 2300, 2300, 2500, 2300, 2700, 2300, 2300, 2300, 2700, 2300, 2700, 2300, 2300, 2300, 2300, 1900, 2700, 2300, 2300, 2300] 
 
}; 
 
var arr = prices['27']; 
 

 
var lowest = new Array(3).fill(Number.MAX_SAFE_INTEGER); 
 

 
for (var i = arr.length; --i >= 0;) { 
 
    var x = arr[i]; 
 
    // Update "lowest" array, as appropriate 
 
    for (var j = 0; j < lowest.length; j++) { 
 
    if (x < lowest[j]) { 
 
     lowest.splice(j, 0, x); 
 
     lowest.pop(); 
 
     break; 
 
    } 
 
    } 
 
} 
 

 
console.log(lowest);