2012-02-01 41 views
1

我需要返回最靠近零的元素的位置,而不是負數。我想輸入一個寬度變量,並從數組元素中減去,最接近0將返回最佳捲尺寸的數組位置我希望這是有道理的。謝謝。返回最小數字(非負數)的陣列位置

var width = "" 

var rollArray = [36, 48, 60, 72] 
      var newArray = [] 
      for(i in rollArray){ newArray.push ((rollArray[i]) - width) } 

alert(newArray); 

收益寬度減去每一個元素,現在我需要找到如何返回的最低值排列位置,這樣我可以得到相當於rollArray位置的卷大小。

+1

請注意,正確的做法是,不要使用'for-in'來在JavaScript中迭代數組。它的目的是迭代對象屬性。相反,如果有任何道具或方法被添加到數組原型中,你會從'for-in'中得到奇怪的結果。 – 2012-02-01 03:46:13

+0

因此,用你的例子,你想要返回什麼? 0,因爲36是最接近零的? – j08691 2012-02-01 03:49:48

回答

3
var width = 41; 
var rollArray = [36, 48, 60, 72]; 
var closest = rollArray.filter(function(ele){return ele-width >= 0}).sort()[0]; 
+0

天才,太棒了!非常感激! – user1181825 2012-02-01 04:10:10

0
var width = "" 

var rollArray = [36, 48, 60, 72] 
      var newArray = [] 
      var min=1000000 //a very large number that you know it's larger than (rollArray[i]) - width) 
      var minIndex=-1 
      for (var i=0; i<rollArray.length; i++){ newArray.push ((rollArray[i]) - width) 
      if (min< rollArray[i]) - width & rollArray[i]) - width >0) 
      { 
          min = rollArray[i]) - width; 
          minIndex = i; 
      } 
} 
alert (minIndex); 
alert(newArray); 
+0

有比這更簡單的方法。但這是一個有趣的方法 – ajax333221 2012-02-01 04:01:31

0
var width = 37; 
var rollArray = [36, 48, 60, 72]; 
var closest = null; 
for (var i=0; i<rollArray.length; i++) 
{ 
    if (rollArray[i] >= width) 
    { 
     if (closest == null || rollArray[i] <= rollArray[closest]) 
     { 
      closest = i; 
     } 
    } 
}