在对象数组上使用扩展运算符来访问元素[重复]

Posted

技术标签:

【中文标题】在对象数组上使用扩展运算符来访问元素[重复]【英文标题】: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 中那样使用扩展运算符。 【参考方案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 在评论中所说的

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

【讨论】:

以上是关于在对象数组上使用扩展运算符来访问元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ES6 扩展运算符和剩余运算符从数组或对象中删除特定元素

使用 map 时使用扩展运算符扩展数组

ES6-05:数组的扩展

Js es6中扩展运算符(...)

ES6 扩展运算符

对象的扩展运算符(...)深拷贝还是浅拷贝