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

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

[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),看到更好的实现会非常有趣。


当前回答

如果要将数组中的元素推送到数组的开头,请使用<func>.apply(<this>,<array of args>):

常量arr=[1,2];取消申请(arr,[3,4]);控制台日志(arr);//[3, 4, 1, 2]

其他回答

快速付款表:

shift/unshift和push/pop这两个术语可能有点令人困惑,至少对于不熟悉C语言编程的人来说是如此。

如果您不熟悉该术语,以下是替代术语的快速翻译,可能更容易记住:

* array_unshift()  -  (aka Prepend ;; InsertBefore ;; InsertAtBegin )     
* array_shift()    -  (aka UnPrepend ;; RemoveBefore  ;; RemoveFromBegin )

* array_push()     -  (aka Append ;; InsertAfter   ;; InsertAtEnd )     
* array_pop()      -  (aka UnAppend ;; RemoveAfter   ;; RemoveFromEnd ) 

使用拼接,我们在开头将一个元素插入到数组中:

arrName.splice( 0, 0, 'newName1' );

在数组中准备新元素的Cheatsheet

1.阵列#未移位

常量列表=[23,45,12,67];list.unshift(34);console.log(列表);//[34, 23, 45, 12, 67];

2.阵列#拼接

常量列表=[23,45,12,67];列表.拼接(0,0,34);console.log(列表);//[34, 23, 45, 12, 67];

3.ES6扩散。。。

常量列表=[23,45,12,67];常量newList=[34,…list];console.log(newList);//[34, 23, 45, 12, 67];

4.数组#concat

常量列表=[23,45,12,67];常量newList=[32].contat(列表);console.log(newList);//[34, 23, 45, 12, 67];

注意:在每个示例中,您都可以通过提供更多要插入的项目来准备多个项目。

变量a=[23,45,12,67];a.未移位(34);console.log(a);//[34, 23, 45, 12, 67]

另一种方法是通过凹面:

var arr=[1,2,3,4,5,6,7];console.log([0].contat(arr));

concat和unshift的区别在于,concat返回一个新数组。他们之间的表现可以在这里找到。

function fn_unshift() {
  arr.unshift(0);
  return arr;
}

function fn_concat_init() {
  return [0].concat(arr)
}

以下是测试结果: