Javascript 将数组的最后一个元素复制到其他位置,然后将其从数组末尾移除

Javascript 将数组的最后一个元素复制到其他位置,然后将其从数组末尾移除,javascript,arrays,node.js,Javascript,Arrays,Node.js,我正在寻找一种整洁的(单语句)方法,用于将数组的最后一个元素复制到不同的位置(覆盖现有元素),然后将其从数组的末尾移除 另一种方法是:在给定索引处的元素和最后一个索引处的元素之间交换,然后删除最后一个索引处的元素 我可以这样做: function func(array, index) { array[index] = array[array.length - 1]; array.length--; return array; } 就像这样: function func(

我正在寻找一种整洁的(单语句)方法,用于将数组的最后一个元素复制到不同的位置(覆盖现有元素),然后将其从数组的末尾移除

另一种方法是:在给定索引处的元素和最后一个索引处的元素之间交换,然后删除最后一个索引处的元素

我可以这样做:

function func(array, index) {
    array[index] = array[array.length - 1];
    array.length--;
    return array;
}
就像这样:

function func(array, index) {
    array[index] = array.slice(-1)[0];
    array.pop();
    return array;
}
当然,上述两种功能的任何“混合体”

是否有一个单一的语句方法来实现这一点

我正在考虑使用
splice
,但我有点不确定如何实际使其工作。

您可以使用
pop()
,然后将其分配给所需的索引。因为
pop()
返回数组的最后一个元素。您不需要从函数返回数组,因为它会修改数组

const func=(数组,索引)=>array[index]=array.pop();
设arr=[0,1,2,3,4',last'];
func(arr,2);
console.log(arr)
您可以尝试以下方法:

函数func(数组,索引){
array[index]=array.pop();
返回数组;
}
//或
//常量func=(数组,索引)=>(数组[index]=array.pop(),数组);
常数arr=func([1,2,3,4],1);

控制台日志(arr)您的第一个函数可能是最有效的。使用
.slice()
.splice()
将需要更多的复制。@Pointy:谢谢。我不太关心运行时的效率,而更关心干净的代码。即使
splice
成本更高,您是否知道该如何操作?嗯,“干净的代码”是一件主观的事情。一旦你在一个函数中隔离了这个操作,在我看来,它并没有什么不干净的地方。@Pointy:只要意识到我可以做类似于
返回array.slice(0,index).concat(array.slice(-1)).concat(array.slice(index+1,-1))。。。但下面的两个答案是完美的。谢谢@阿汗,这不是真的。将
.length
属性设置为较小的值将从数组末尾删除元素。不幸的是,正如我刚刚意识到的,当
index==array.length-1
时,这不起作用。它起作用,但您不会注意到任何更改,因为您删除了元素并将其重新分配给相同的索引。对,因此,这并没有达到我定义的要求——首先交换元素(在这种特定情况下没有效果),然后移除最后一个元素(这意味着最后一个元素应该从数组中移除)。所以你可以说“它起作用了”,但它解决的问题与这里提到的不同。谢谢。我觉得在
操作符后面放一个语句(而不是“非活动”表达式)有点恶心。不是吗?不幸的是,正如我刚刚意识到的,当
index==array.length-1
@goodvibration时,这不起作用。当
index==array.length-1
时,预期的输出是什么。原始数组或删除最后一个元素的数组?删除最后一个元素的数组。记住-第一步是交换(在这种情况下不会产生影响),第二步是删除。因此,在操作结束时,最后一个元素应该在数组中。谢谢。@goodvibration我已经更新了第二个版本。请检查一下。