【问题标题】:How can I remove an array element at a specific index only using pop?如何仅使用 pop 删除特定索引处的数组元素?
【发布时间】:2021-11-23 07:08:43
【问题描述】:

我想在 JavaScript 中创建一个函数,给定一个数组和一个索引,删除该索引中的值。例如:removeAt([1,2,3,4],2) 应该返回 [1,2,4]。我可以使用的唯一数组方法是 pop()。

我想出了这个(想知道是否有更有效的方法):

function removeAt(arr, index) {
  var j = 0;
  var arr2 = [];
  for (var i = 0; i < arr.length - j; i++) {
    if (i != index) {
      arr2[i] = arr[i + j];
    } else {
      arr2[i] = arr[i + 1];
      j++;
    }
  }
  return arr2
}

console.log(removeAt([1, 2, 3, 4, 5], 3))

【问题讨论】:

  • @HassanImam 他不允许使用那个。
  • @SagarV 这两种方法他都不能用,只能pop()
  • @Barmar 啊,我没注意到。只有流行音乐,它很复杂。他最好根本不用它。
  • 我也想不出使用pop() 的方法。我认为这是使用其他方法的限制,而不是使用此方法的要求。

标签: javascript arrays function


【解决方案1】:

您应该只添加到if 条件中的结果数组,而不是else。使用j作为结果中的索引,不要加减。

function removeAt(arr, index) {
  var j = 0;
  var arr2 = [];
  for (var i = 0; i < arr.length; i++) {
    if (i != index) {
      arr2[j] = arr[i];
      j++;
    }
  }
  return arr2
}

console.log(removeAt([1, 2, 3, 4, 5], 3))

【讨论】:

  • 这个答案肯定会改进我的代码。非常聪明的@Barmar
  • 是的,我打算用这样的东西来回答,但真的想不出更好的、不同的,甚至是利用流行音乐的东西。
【解决方案2】:

您可以简单地使用Array.prototype.splice

function removeAt(arr, idx){
    return arr.splice(idx, 1);
} 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Array.prototype.pop 只会删除最后一个元素,您必须对数组进行不必要的操作才能实现它。

【讨论】:

  • 除了pop之外不能使用任何数组方法
  • 这在学术练习中很常见,旨在教授基本的数据结构操作。
  • 我意识到这是一个学术问题,但我坚持我所说的。正确的方法是使用splice,否则你就是在教这个人错误的方法。这对我来说比保持答案得到的 -1 更重要。
【解决方案3】:

如果不允许使用除 pop() 之外的任何 Array 函数,则可以通过不使用它创建额外的变量来节省内存空间。

function removeAt(arr, index){ 
    if(index>arr.length-1 || index<0) return arr;
    for(let i=0; i<arr.length; i++) {
        if(i>=index) {
            arr[i] = arr[i+1];
        }
    }
    arr.pop();
    return arr;  
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2021-12-26
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多