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

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

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

[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)看到更好的实现将真的很有趣。

蓝染大人2020/03/09 20:39:57

Using ES6 destructuring: (avoiding mutation off the original array)

const newArr = [item, ...oldArr]

斯丁AJinJin2020/03/09 20:39:57
var array = [23, 45, 12, 67];  
array.unshift(11);  
alert(array);
猴子Davaid神乐2020/03/09 20:39:57

如果您需要在数组的开头连续插入一个元素,则使用push语句后再调用会更快reverse,而不是一直调用unshift

基准测试: http //jsben.ch/kLIYf

凯老丝2020/03/09 20:39:57

var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata]; 
console.log(testdata)
    

Mandy村村Harry2020/03/09 20:39:57

在ES6中,使用传播运算符...

演示

var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]

console.log(arr)

Gil伽罗2020/03/09 20:39:57

你有一个数组: var arr = [23, 45, 12, 67];

要将项目添加到开头,请使用splice

var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);

宝儿猪猪西门2020/03/09 20:39:57

push()在数组的末尾添加一个新元素。
pop()从数组末尾删除元素。

unshift()在数组的开头添加一个新元素。
shift()从数组的开头删除元素。

采用 theArray.unshift(response)

逆天乐2020/03/09 20:39:57

快速备忘单:

术语“移位/不移位”和“推入/弹出”可能会有些混乱,至少对于那些可能不熟悉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 ) 
樱十三2020/03/09 20:39:57

另一种方式来做到这一点 concat

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

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

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

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

这是测试结果

在此处输入图片说明

十三蛋蛋2020/03/09 20:39:57

阵列运算图

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

Pro路易2020/03/09 20:39:57

使用unshift就像一样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_front/ pop_front)元素的能力,您永远不必自己实现这些。


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

const array = [ 3, 2, 1 ]

const newFirstElement = 4

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

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 ]