我需要在数组的开头添加或添加元素。
例如,如果我的数组如下所示:
[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)
,看到更好的实现将真的很有趣。
使用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 ]
var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]
...
: 演示
var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]
console.log(arr)
通过concat
做到这一点的另一种方法
var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));
之间的差concat
和unshift
是concat
返回一个新的数组。他们之间的表现可以在这里找到。
function fn_unshift() {
arr.unshift(0);
return arr;
}
function fn_concat_init() {
return [0].concat(arr)
}
这是测试结果
快速备忘单:
术语 “移位 / 不移位” 和 “推入 / 弹出” 可能会有些混乱,至少对于那些可能不熟悉 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 )
您有一个数组: var arr = [23, 45, 12, 67];
要将项目添加到开头,您想使用splice
:
var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);
push()
将新元素添加到数组的末尾。
pop()
从数组末尾删除元素。
unshift()
将新元素添加到数组的开头。
shift()
从数组的开头删除一个元素。
使用theArray.unshift(response)
实际上,所有unshift
shift
/ push
shift
和pop
/ pop
对原始数组进行突变 。
unshift
/ push
从开始 / 结束向现有数组添加项目,而shift
/ pop
从数组的开始 / 结束删除项目。
但是,有一种方法可以不加突变地将项目添加到数组中。结果是一个新数组,要添加到数组末尾,请使用以下代码:
const originArray = ['one', 'two', 'three'];
const newItem = 4;
const newArray = originArray.concat(newItem);
要添加到原始数组的开头,请使用以下代码:
const originArray = ['one', 'two', 'three'];
const newItem = 0;
const newArray = (originArray.reverse().concat(newItem)).reverse();
通过上述方法,您无需更改即可添加到数组的开头 / 结尾。
var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata];
console.log(testdata)
var array = [23, 45, 12, 67];
array.unshift(11);
alert(array);