3

私は数字のソートされた配列[2、5、12、34、56]と乱数「17」を持っています。配列から次に大きい数値のインデックスが必要です。この場合、「3」は配列内で次に大きい数値である「34」のインデックスであるため、「3」を受け取りたいと考えています。

何か案は?

4

7 に答える 7

7

要件を満たす関数は、次のように単純です。

function getNextHighestIndex(arr, value) {
    var i = arr.length;
    while (arr[--i] > value);
    return ++i; 
}

getNextHighestIndex([2, 5, 12, 34, 56], 17);  // 3
getNextHighestIndex([2, 5, 12, 34, 56], 100); // 5
getNextHighestIndex([2, 5, 12, 34, 56], 0);   // 0

指定された値より大きい値が配列にない場合、配列の長さが返されます。配列内のすべての値がそれより大きい場合、0 が返されます。

于 2013-10-31T23:27:01.063 に答える
6

vzwick の提案に従って実行すると、アンダースコア filterindexOfメソッドを使用してこれを非常にきれいに行うことができます。

function getNextHighestIndex(arr, number) {
  return _.indexOf(arr, _.filter(arr, function(val) { 
    return val > number 
  })[0]);
}

getNextHighestIndex([2, 5, 12, 34, 56], 17);

またはバニラ JavaScript:

function getNextHighestIndex(arr, number) {
  for (var i = 0; i < arr.length; i ++) {
    if (arr[i] > number) {
      return i;
    }
  }
}

getNextHighestIndex([2, 5, 12, 34, 56], 17);
于 2013-10-31T23:01:46.130 に答える
2

このコードは、探しているインデックスを返し、配列内にそれ以上の数値がない場合は -1 を返します。

function findNextHighest(array_input, compare_num){
    for (i=0;i<array_input.length;i++){
        if (array_input[i] > compare_num){
            return i;
        }
    }
    return -1; // Value returned if no highest number found in the array
}
于 2013-10-31T23:09:06.587 に答える
1

参照: http://jsfiddle.net/w42wE/3/ (実行をクリック)

var MyArray = [2, 5, 12, 34, 56]
var RandomNumber       = 17;
var MinGreaterThanPos;

for (var i =0; i < MyArray.length; i++) {
    if (MyArray[i] <= RandomNumber) 
        continue;

    if (typeof(MinGreaterThanPos) == 'undefined' || MyArray[i] < MinGreaterThanPos)
    { 
        MinGreaterThanPos = i;
    }
}

alert(MinGreaterThanPos);
于 2013-10-31T22:55:11.193 に答える
1
var myArray      = [2, 5, 12, 34, 56],
    randomNumber = 17;

var result = $(myArray)
    .map(function(i){ return (this > randomNumber) ? i : null })
    .get() // un-wraps the jQuery object to a proper Array
    .shift();

そうは言っても、OP はより無駄のない代替手段としてunderscore.jsを調べたいと思うかもしれません。正直なところ、jQuery はこのタスクには少しやり過ぎです。

于 2013-10-31T22:58:11.390 に答える
1
for (var i=0; i<ary.length; i++;) {
  if (ary[i] > target) 
    return i;  
}
于 2013-10-31T23:02:00.393 に答える