如何删除一个数组元素在一个特定的索引只使用pop?



我想在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))

只能在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))

如果不允许使用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;  
}

您可以简单地使用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只会删除最后一个元素,你必须对数组进行不必要的操作才能实现它。

相关内容

最新更新