How can I add new array elements at the beginning of an array in Javascript?
我需要在数组的开头添加或预置元素。
例如,如果我的数组如下所示:
1 | [23, 45, 12, 67] |
Ajax调用的响应是
1 | [34, 23, 45, 12, 67] |
目前我正计划这样做:
1 2 3 4 5 6 7 8 9 | var newArray = []; newArray.push(response); for (var i = 0; i < theArray.length; i++) { newArray.push(theArray[i]); } theArray = newArray; delete newArray; |
有没有更好的办法?javascript是否有任何内置的功能可以做到这一点?
我的方法的复杂性是
使用
unshift /push —在数组的开头/结尾添加一个元素shift /pop —删除并返回数组的第一个/最后一个元素
一个简单的图表…
1 2 | unshift -> array <- push shift <- array -> pop |
图表:
1 2 3 4 5 | add remove start end push X X pop X X unshift X X shift X X |
查看MDN阵列文档。实际上,每一种能够从数组中推/弹出元素的语言都具有取消推/移位(有时称为
1 2 3 | var a = [23, 45, 12, 67]; a.unshift(34); console.log(a); // [34, 23, 45, 12, 67] |
使用ES6时,使用排列运算符
演示
1 2 3 4 | var arr = [23, 45, 12, 67]; arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67] console.log(arr) |
另一种方法是通过
1 2 | var arr = [1, 2, 3, 4, 5, 6, 7]; console.log([0].concat(arr)); |
1 2 3 4 5 6 7 8 | function fn_unshift() { arr.unshift(0); return arr; } function fn_concat_init() { return [0].concat(arr) } |
这是测试结果
快速作弊表:
术语shift/unshift和push/pop可能有点混淆,至少对于那些不熟悉C语言编程的人来说。
如果你不熟悉这个行话,这里有一个替代术语的快速翻译,这可能更容易记住:
1 2 3 4 5 | * array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin ) * array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin ) * array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd ) * array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd ) |
你有一个数组:
要在开头添加项目,您需要使用
1 2 3 | var arr = [23, 45, 12, 67]; arr.splice(0, 0, 34) console.log(arr); |
使用
1 2 3 4 | var testdata = new Array(); testdata = [23, 45, 12, 67]; testdata = [34, ...testdata]; console.log(testdata) |
1 |
不变异
实际上,所有的
但是有一种方法可以在不发生突变的情况下向数组中添加项。结果是一个新数组,要添加到数组末尾,请使用以下代码:
1 2 3 | const originArray = ['one', 'two', 'three']; const newItem = 4; const newArray = originArray.concat(newItem); |
要添加到原始数组的开头,请使用以下代码:
1 2 3 | const originArray = ['one', 'two', 'three']; const newItem = 0; const newArray = (originArray.reverse().concat(newItem)).reverse(); |
通过上面的方法,您可以添加到数组的开始/结束部分,而不需要进行突变。
如果需要在数组的开头连续插入一个元素,那么使用
基准测试:http://jsben.ch/kliyf
1 2 3 | var array = [23, 45, 12, 67]; array.unshift(11); alert(array); |
使用
1 | arrName.splice( 0, 0, 'newName1' ); |