我需要在数组的开头添加或添加元素。
例如,如果我的数组如下所示:
[23, 45, 12, 67]
我的 AJAX 调用的响应是34,我希望更新后的数组如下所示:
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)看到更好的实现会很有趣。
O(n)
使用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)元素,您永远不必自己实现这些。
push_front
pop_front
正如评论中所指出的,如果你想避免改变你的原始数组,你可以使用concat,它将两个或多个数组连接在一起。您可以使用它在功能上将单个元素推送到现有数组的前面或后面;为此,您需要将新元素转换为单个元素数组:
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);