2014-11-21 40 views
0

我想要做的輸入值,並檢查數組中存在或處於特定陣列的 值之間的值,並獲得較低的範圍值指數檢查是否存在的價值或陣列特定值之間位於

例如,我有此數組:

dataArr = [10, 20, 30, 50, 70, 80, 90, 100]; 

如果

input = 22; 

函數應該從dataArr返回的值20和索引30。

+0

你嘗試過什麼和你在哪裏卡住了?你知道如何迭代數組的值嗎? – 2014-11-21 06:23:24

+0

function gt(n){return n> this;} dataArr.findIndex(gt,22); – dandavis 2014-11-21 06:24:55

+0

@dandavis findIndex()在主流瀏覽器中不受支持。它也許只適用於Firefox – 2014-11-21 06:30:43

回答

1
var dataArr = [10, 20, 30, 50, 70, 80, 90, 100]; 

function _find(array, search) { 
    var indexes = [], 
     len = array.length, 
     i, 
     index = array.indexOf(search); 

    if (~index) { 
    return index; 
    } 

    if (search < array[0]) { 
    return -1; 
    } 

    for (i = 1; i < len; i++) { 
    if (array[i] >= search) { 
     return [i - 1, i]; 
    }  
    } 

    return -1; 
} 


console.log(_find(dataArr, 22)); 

DEMO:http://jsbin.com/vakanu/1/

但陣列應該被排序

+0

非常感謝兄弟 – 2014-11-21 07:00:26

0

你可以通過使用排序數組來實現它。下面的代碼將會訣竅。

var inputVal = 22 
dataArr = sortThisArray(dataArr); //IF needed 
for (var i=0; i<dataArr.size(); i++) 
{ 
     if(dataArr[i] > inputVal) //Check if the array value is greater than input value 
     { 
      if(i < (dataArr.size()-1)) 
      { 
       alert("Range is" + i +"and its last element in array so higher index"); 
      } 
      else //we can find the LOWER BOUND index as i and HIGHER BOUND index as i+1 
      { 
       alert("Range are" + i +"and"+ i+1); 
      } 
     } 
} 
+0

不返回預期的輸出 – 2014-11-21 06:40:33

+0

什麼是dataArr.size()? – dandavis 2014-11-21 06:42:00

相關問題