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),将其推入...并返回其索引值。我似乎无法使其发挥作用。 有什么想法吗?
答案 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);
}
确实有几种方法可以做到这一点,但代码中的修复方法如下:
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
推入数组,然后使用map
或sort
对其进行排序。
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 中的索引。
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;