【问题标题】:Add object to the beginning of array using spread operator使用扩展运算符将对象添加到数组的开头
【发布时间】:2017-09-26 17:23:01
【问题描述】:

我有一个这样的数组:

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 并且它可以工作,我想知道是否有办法使用扩展运算符来做同样的事情。

【问题讨论】:

  • 你不能只用unshift()吗?
  • 你的答案在这里:stackoverflow.com/questions/8073673/…
  • var result = [newObj, ...oldArray] 也给出了正确的输出。我错过了什么吗?
  • 这么多答案建议 unshift 但这不是你问的。 var result = [newObj, ...oldArray] 确实有效并且是正确的答案,问题是你的问题有一个错误的前提......
  • @AluanHaddad 我说过 var result = [newObj, ...oldArray] 有效,而我使用的是 unshift 有效。但是我正在使用一个下拉库,该库将结果数组用于生成下拉列表,并且 result = [newObj, ...oldArray] 会生成一个破坏该库的键值。我已经纠正了删除错误前提的问题。

标签: javascript arrays reactjs react-redux spread-syntax


【解决方案1】:

我有点晚了,但是

你可以用 spreed 像这样修改它来解决这个问题:

改变:

var result = [newObj, ...oldArray]

为:

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

【讨论】:

    【解决方案2】:

    您可以使用 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() 有什么问题?它似乎像乔治的代码 sn-p 在他下面的答案中所示的那样工作。为什么是-1?使用 unshift 有缺点吗? (编辑:)哦,因为它没有使用问题中提到的扩展运算符?
    • 你没有回答问题。
    • @AP。是的,众所周知,SO/SE 非常敌对,互联网上到处都有人谈论这里的消极情绪。我同意。投反对票,投反对票,投反对票,有时一无所获。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 2018-05-13
      • 2017-03-17
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2017-11-15
      相关资源
      最近更新 更多