2014-11-21 42 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

相关问题