Javascript插入数组并返回索引位置

时间:2016-05-15 23:42:29

标签: javascript arrays loops for-loop push

function getIndexToIns(arr, num) {
  arr.sort(function(a,b) {
    return a-b;
  });
  for (var i=0;i<arr.length;i++) { // cycles through the array
    if (arr[i] >= num) { // if array value is bigger than num 
        return i; // return index pos of num bigger than value
    }
    else if (arr[i] === undefined) { // if not found 
        arr.push(num); // push to array 
        return arr.indexOf(num); // return index pos of new num <-- should return 3 in this case
    }
  }
}

getIndexToIns([2, 5, 10], 15);

// getIndexToIns([2,5,10],15)应该返回3.

这样做的任务是对数组进行排序,并返回(arg2)的索引值(如果它在数组中)。 EX:getIndexToIns([10,20,30,40,50],35)应该返回3.

我遇到的问题是,如果在数组中找不到(arg2),将其推入...并返回其索引值。我似乎无法使其发挥作用。 有什么想法吗?

6 个答案:

答案 0 :(得分:1)

为什么不使用阵列上的.push.indexOf方法?

function arrSort(a, b) {
    return a - b;
}

function getIndexToIns(arr, num) {
    // you sort the array
    arr.sort(arrSort);

    // if it doesn't contain the num
    if(arr.indexOf(num) == -1) {
        // add the num to the array
        arr.push(num);

        // sort the array again
        arr.sort(arrSort);

        // return the index of the num
        return arr.indexOf(num);
    }

    // if the num is in the array, return its position
    return arr.indexOf(num);
}

答案 1 :(得分:1)

另一种方法:

function getIndex(arr, num) {
  return arr.concat(num).sort(function(a, b) {
    return a - b;
  }).indexOf(num);
}

确实有几种方法可以做到这一点,但代码中的修复方法如下:

Working Example

function getIndexToIns(arr, num) {
  arr.sort(function(a,b) {
    return a-b;
  });
  for (var i=0;i<arr.length;i++) { // cycles through the array
    if (arr[i] >= num) { // if array value is bigger than num 
        return i; // return index pos of num bigger than value
    }
    if (i === arr.length - 1) { // if not found 
        arr.push(num); // push to array 
        return arr.indexOf(num); // return index pos of new num <-- should return 3 in this case
    }
  }
}

在您的代码中,您检查过if (arr[i] === undefined)这种情况永远不会发生,所以请检查您是否在阵列末尾,如果是,那就意味着您还没有找到您的号码,然后你可以推它并获得索引。

答案 2 :(得分:1)

您可以将num推入数组,然后使用mapsort对其进行排序。

function getIndexToIns(arr, num) {
  arr.push(num);
  arr.map(function(a,b) {
    a-b;
     arr.indexOf(num);
  });
  console.log(arr+'\n');
  console.log(num +' is at '+arr.indexOf(num)+'\n');
}

getIndexToIns([2, 5, 10], 15);

答案 3 :(得分:1)

由于您的数组似乎已经排序,您应该使用二分搜索来查找索引,然后将其插入splice

function getIndexToIns(arr, num) {
  var index = (function search(from, to) {
    if(from == to) return to;
    var m = Math.floor((from+to)/2);
    if(arr[m] > num) return search(from, m);
    if(arr[m] < num) return search(m+1, to);
    return m;
  })(0, arr.length);
  arr.splice(index, 0, num);
  return index;
}

或者,因为它无论如何都是线性的,手动向后循环:

function getIndexToIns(arr, num) {
  for(var i=arr.length; i>0 && arr[i-1]>num; --i) arr[i] = arr[i-1];
  arr[i] = num;
  return i;
}

答案 4 :(得分:0)

function getIndexToIns(arr, num) {
    function compare(a,b){
        return  a-b;
    }
    arr.push(num);
    arr.sort(compare);
    console.log(num);
    num = arr.indexOf(num);
    return num;
}

getIndexToIns([40,60],50);

答案 5 :(得分:0)

我将用于,嵌套了两个 if 条件,计算变量 j k 中的索引。

&#13;
&#13;
function getIndexToIns(arr, num) {
  // Find my place in this sorted array.
  var j = 0;
  var k = 0;
  
  arr.sort(function(a, b){return a - b;});
  for (var i= 0; i < arr.length; i++){
    if ( arr[i] < num ) {
      k++;      
      if (arr[i] > num) {
        j++;
      }
    }
  }
  return j+k;
}
console.log(getIndexToIns([3, 10, 5], 3));
console.log(getIndexToIns([10, 20, 30, 40, 50], 35));
console.log(getIndexToIns([10, 20, 30, 40, 50], 30));
console.log(getIndexToIns([40, 60], 50));
console.log(getIndexToIns([5, 3, 20, 3], 5));
console.log(getIndexToIns([2, 20, 10], 19));
console.log(getIndexToIns([2, 5, 10], 15));
&#13;
&#13;
&#13;