当前位置: 代码迷 >> JavaScript >> 无法在给定的数组索引处插入数字
  详细解决方案

无法在给定的数组索引处插入数字

热度:81   发布时间:2023-06-05 10:13:43.0

有人可以向我解释为什么我的代码不起作用吗?

应该将第二个arg( 3 )放在arr( [1,5] )之间。 但是JS唯一告诉我的是“ 3”。

function where(arr, num){
  for(var i=0;i<arr.length;i++){
    if(arr[i] < num){
        slice(arr[i+1,0,num])
    }
    else if(arr[i] > num){
        slice(arr[i+1,0,num])
    }
  }
  return arr;
}
where = ([1, 5],3);

请知道,我刚开始使用JS,所以我的知识有限。 任何建议或帮助都非常感谢。

这里有一些问题。

  1. 方法必须通过数组调用。 arr.slice()slice(...)将抛出错误。
  2. slice不添加到数组中。 它从数组中删除。 您需要使用splice
  3. 像您一样在此处使用for循环并不是最好的方法,因为在插入元素后,它将继续进行。 本质上,您想将元素插入到有序列表中吗? 如果是这样,请在插入元素或使用break立即return功能。

您的函数可能如下所示:

function where (arr, num) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > num) {
      // Inserts num at i
      arr.splice(i, 0, num);
      return arr;
    }
  }
  // If it's the highest num, add to the end of the array.
  arr.push(num);
  return arr;
}

var newArray = where([1, 5], 3);

但是,您的问题有点模棱两可,因此,如果您要在特定索引处插入元素,则可以直接使用splice:

var arr = [1, 5];
// Inserts 3 at index of 1
arr.splice(1, 0, 3);
// arr becomes [1, 3, 5]

我不确定您要在这里做什么,但是:

  • 我认为“切片”功能无法实现您所期望的; 您应该在Array上调用它,请参见 ,它会返回一个数组,因此您必须将结果分配给某些对象

  • 但是,只看到( 3 )的原因是因为您从未调用定义的?here函数。 相反,您正在计算([1,5],3) ,并将其影响到名为where的新全局变量。

([1,5],3)值为“ 3”的原因是由于 。 基本上:

([1,5],3)

是相同的

[1,5],3

会同时评估[1,5]3 ,并返回最后的评估值( 3

尝试将最后一行更改为实际的函数调用:

var result = where([1, 5],3);

由于如何调用slice,您将得到错误; 希望与文档一起您应该了解如何使其工作。

另外,正如其他地方所指出的那样, slice可能不是您首先要调用的函数。

我认为您希望在正确的位置进行和arr.splice之类的操作:

function insertItemInOrderedArray(arr, item, from, to) {
  if(from === undefined) from = 0;
  if(to === undefined) to = arr.length;
  if(from >= to) return arr.splice(from, 0, item), arr;
  var m = (from + to) / 2 | 0;
  if(arr[m] > item) return insertItemInOrderedArray(arr, item, from, m);
  if(arr[m] < item) return insertItemInOrderedArray(arr, item, m+1, to);
  return arr;
}
insertItemInOrderedArray([1,5], 3); // [1,3,5]
  相关解决方案