如何在JavaScript中的数组开头添加新的数组元素?

2022-08-29 21:54:03

我需要在数组的开头添加或预置元素。

例如,如果我的数组如下所示:

[23, 45, 12, 67]

来自我的AJAX调用的响应是,我希望更新的数组如下所示:34

[34, 23, 45, 12, 67]

目前我打算这样做:

var newArray = [];
newArray.push(response);

for (var i = 0; i < theArray.length; i++) {
    newArray.push(theArray[i]);
}

theArray = newArray;
delete newArray;

有没有更好的方法来做到这一点?JavaScript是否有任何内置功能可以做到这一点?

我的方法很复杂,看到更好的实现会非常有趣。O(n)


答案 1

使用取消换档。这就像 push,只是它向数组的开头而不是结尾添加元素。

  • unshift/push- 将元素添加到数组的开头/结尾
  • shift/pop- 删除并返回数组的第一个/最后一个元素

一个简单的图表...

   unshift -> [array] <- push
   shift   <- [array] -> pop
 

和图表:

          add  remove  start  end
   push    X                   X
    pop           X            X
unshift    X             X
  shift           X      X

查看 MDN 阵列文档。实际上,每一种能够从数组中推送/弹出元素的语言也都能够取消移位/移位(有时称为/)元素,您永远不必自己实现这些元素。push_frontpop_front


如注释中所指出的,如果要避免改变原始数组,可以使用 concat,它将两个或多个数组连接在一起。您可以使用它从功能上将单个元素推到现有数组的前面或后面;为此,您需要将新元素转换为单元素数组:

const array = [3, 2, 1]

const newFirstElement = 4

const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]

console.log(newArray);

concat还可以追加项目。参数可以是任何类型;它们被隐式包装在单元素数组中,如果它们还不是数组:concat

const array = [3, 2, 1]

const newLastElement = 0

// Both of these lines are equivalent:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ]

console.log(newArray1);
console.log(newArray2);

答案 2

array operations image

var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]