【问题标题】:Using spread operator on array of object to access elements [duplicate]在对象数组上使用扩展运算符来访问元素[重复]
【发布时间】:2021-08-08 10:33:18
【问题描述】:

如何使用扩展运算符访问我的对象数组中的元素?

const array = [{ obj: 1},{ obj: 2}]

console.log([...array].obj)
// Output undefined 

console.log([...array.obj])
// Output Uncaught TypeError

我看过这篇帖子Use spread operator on objects array? 非常相似,但他们不尝试访问元素。

那么可以在对象数组上使用扩展运算符来访问元素吗?如果有怎么办?

【问题讨论】:

  • 您期望输出什么? 12?
  • 是的,没错
  • [...array] -> 将array 克隆到一个新数组中。您获取该数组的 .obj 属性。数组没有 .obj 属性,所以你得到未定义的。 [...array.obj] -> 将 array.obj 作为数组传播。由于数组没有.obj 属性,因此您正在执行undefined 的数组传播。这会导致错误。
  • 长话短说,你不能像在 JS 中那样使用扩展运算符。

标签: javascript spread-syntax


【解决方案1】:

您可能正在寻找map

你需要的是array.map(element => element.obj)

您的尝试有以下问题:

  • console.log([...array].obj):您正在将array 传播到一个新数组中,然后您正在记录新数组的obj 属性,即undefined,正如预期的那样

  • console.log([...array.obj]):你试图传播arrayobj属性,这也是undefined,这意味着你试图传播undefined,这会引发错误

【讨论】:

  • 不抱歉,我的问题是它到底是什么。我知道如何使用诸如 map、forEach、for 之类的函数来浏览对象……但这不是我的问题。不过谢谢
  • 再次感谢您的编辑和帮助。所以没有办法使用传播语法来访问我的元素?我必须使用一个函数?
  • @user15873596 传播根本不像映射。所以......不,你不能让它像映射一样工作。
  • 谢谢@VLAZ,这正是我想要的:)
  • @user15873596 扩展运算符就像它所说的那样,它用于将数组扩展为新数组,或将对象键值对扩展为新对象。您不能使用此运算符修改内容
【解决方案2】:

简短回答,

我们不能在对象数组上使用扩展运算符来访问元素。

正如@VLAZ 在评论中所说的

传播根本不像映射。所以......不,你不能做 它像地图一样工作

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 2021-01-17
    • 2019-02-21
    • 2020-07-14
    • 2020-10-04
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多