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

时间:2015-07-26 20:56:05

标签: javascript arrays slice

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

它应该将第二个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,所以我的知识有限。 任何建议或帮助都非常感谢。

3 个答案:

答案 0 :(得分:1)

这里有一些问题。

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

    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);
    

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

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

答案 1 :(得分:0)

我不确定你在这里做了什么,但是:

  • 我不认为&#34;切片&#34;功能做你期望的;您应该在数组上调用它,请参阅here,它会返回一个 new 数组,因此您必须将结果分配给某些内容

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

([1,5],3)有价值的原因&#34; 3&#34;是因为comma operator。基本上:

([1,5],3)

相同
[1,5],3

评估[1,5]3,并返回上次评估的值(3

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

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

由于你称之为切片,你会得到错误;希望通过该文档,您应该看到如何使其工作。

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

答案 2 :(得分:0)

我认为您需要dichotomic searcharr.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]