使用展开运算符将对象添加到数组开头

15

我有一个这样的数组:

var oldArray = [{'value': '1', 'label': 'a'}, {'value': '2', 'label': 'b'}]
我想要的是使用展开运算符在数组的开头添加一个新对象:
顺便提一下,这样可以做到:
var oldArray = [{'value': '1', 'label': 'a'}, {'value': '2', 'label': 'b'}]
var newObj = {'value': 'all', 'label': 'all'}
var result = [newObj, ...oldArray]

但是会生成一个名为“newObj”的键值:

var oldArray = [newObj : {'value': 'all', 'label': 'all'}, 0: {'value': '1', 'label': 'a'}, 1:{'value': '2', 'label': 'b'}]

我希望密钥能够自动生成,就像我这样做:

var result = [{'value': 'all', 'label': 'all'}, ...oldArray]

并且想象结果是这样的:

var oldArray = [newObj : {0: 'all', 'label': 'all'}, 1: {'value': '1', 'label': 'a'}, 2:{'value': '2', 'label': 'b'}]

但这会给我一个错误。

现在我正在使用unshift,它可以工作,我想知道是否有一种方法可以使用spread运算符做同样的事情。


3
你可以使用 unshift() 方法来完成这个操作吗?(参考链接:https://www.w3schools.com/jsref/jsref_unshift.asp) - George
如何在JavaScript中在数组开头添加新的数组元素? - taile
4
var result = [newObj, ...oldArray] 也会产生正确的输出。我有什么遗漏吗? - Abhinav Galodha
1
有很多答案建议使用unshift,但那不是你所问的。var result = [newObj, ...oldArray]确实可行且是正确的答案,问题在于你的问题中存在错误的前提... - Aluan Haddad
1
@AluanHaddad 我说过 var result = [newObj, ...oldArray] 可以工作,而我使用的是 unshift。但是我正在使用一个下拉菜单库,该库需要使用生成的数组来生成下拉菜单,而 result = [newObj, ...oldArray] 会生成一个键值,这会破坏该库。我已经更正了问题并删除了错误的前提。 - Diego Unanue
3个回答

11

虽然我有点晚了,但是

你可以通过使用spreed来修改并解决这个问题:

更改为:

var result = [newObj, ...oldArray]

对于:

var result = [{...newObj}, ...oldArray]

如果newObj为空,它将显示[{ }, oldArray] - w3debugger

4
您可以使用unshift()函数来实现这一点:
let oldArray = [{'value': '1', 'label': 'a'}, {'value': '2', 'label': 'b'}]
let newObj = {'value': 'all', 'label': 'all'}
oldArray.unshift(newObj)

console.log(oldArray)

或者,如果你不想修改原始数组,可以这样做:

const result = oldArray.slice()
result.unshift(newObj)
console.log(result)

unshift()有什么问题吗?在下面George答案的代码片段中,它似乎可以正常工作。为什么要减1?使用unshift有什么缺点吗?(编辑:哦,因为它没有使用问题中提到的扩展运算符?) - Michael S
2
@downvoter 如果您没有点踩的话,就可以不用提到它了... Stack Overflow 变得越来越具有敌意。 - AP.
你没有回答所问的问题。 - Aluan Haddad
2
@AP. 是的,SO/SE 在互联网上被认为是非常具有敌意的地方,人们到处都在谈论这里的负面情绪。我同意。总是下投票,下投票,有时甚至毫无原因。 - Quidam

1
你可以使用unshift()将项目添加到数组的开头

var oldArray = [{'value': '1', 'label': 'a'}, {'value': '2', 'label': 'b'}]
var newObj = {'value': 'all', 'label': 'all'}
oldArray.unshift(newObj);

console.log(oldArray);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接