Javascript 是否可以在映射回调函数的单个赋值表达式中分解某些属性并赋值/传递整个对象?

Javascript 是否可以在映射回调函数的单个赋值表达式中分解某些属性并赋值/传递整个对象?,javascript,ecmascript-6,destructuring,Javascript,Ecmascript 6,Destructuring,例如,假设我正在映射一组对象: arrayOfPeople.map( ({ firstname, lastname }) => { // 2 variables scoped here: firstname, lastname }) 我理解我本可以(类似地)做以下工作: arrayOfPeople.map(person => { const { firstname, lastname } = person // except now I actually have 3

例如,假设我正在映射一组对象:

arrayOfPeople.map( ({ firstname, lastname }) => {
  // 2 variables scoped here: firstname, lastname
})
我理解我本可以(类似地)做以下工作:

arrayOfPeople.map(person => {
  const { firstname, lastname } = person
  // except now I actually have 3 variables scoped here: person, firstname, lastname
})
是否有一种语法可以像第二个示例中那样分配所有3个变量(即属性和整个对象),但分配/分解发生在参数所在的括号内

也许是这样的:

arrayOfPeople.map( ({ person = { /* ...entireObject */ }, firstname, lastname }) => {
 // 3 variables scoped here: person, firstname, lastname
})
我意识到这是一行代码的区别,但我很好奇这是否可能

谢谢


编辑:只是为了澄清一下,数组中映射的对象(即“person”)的属性不仅仅是firstname和lastname,我还想访问整个对象,包括firstname和lastname。

没有办法获取对象的原样,并在一条语句中对其进行分解

但是,如果您只想要它的非结构化属性,而不想要非结构化属性,那么对象的原型等等。;然后可以使用rest语法(使用熟悉的
符号):

arrayOfPeople.map({firstname,lastname,…rest})=>{
//这里有3个变量:firstname、lastname、rest
})
在这里测试它:

const-original={
傅:1,,
酒吧:2,
获取baz(){
返回3
}
}
常数{
福,
休息
}=原件
console.log(foo)//1
console.log(rest.bar)//2
console.log(rest.foo)//未定义-它已被解构
console.log(Object.getOwnPropertyDescriptor(rest,'baz'))//不再是getter
/*只是为了让控制台填满可用空间*/

.作为控制台包装器{max height:100%!important;}
我认为这是不可能的,但是您可以执行
({firstname,lastname},I,person)
,然后访问
person[I]
内部。好的,如果在第一个参数中确实无法分配传递的对象,这是一个很好的折衷方法。我忘记了map回调的第三个参数是调用map的整个数组。ThanksI个人会按照您在函数的第一行进行解构的方式进行操作。更清楚了,我明白。我只是说,因为没有一个简洁的语法,所以使用清晰的版本,而不是使用每个人都会忘记的参数的版本。这个解决方案也只适用于迭代函数,一般来说不适用于解构。抱歉,删除了关于意识到这一点的评论,但很奇怪。。。我同意,由于符合规范,它更加清晰和简洁。我只是认为,如果所有的迭代对象分解都能在回调主体之前进行,那就太好了。更容易识别的是,分解不是来自回调作用域外部的某个对象。目前,您可以看到
常量{firstname,lastname,…,etc}=person
,但在查看
=person
之前,您无法立即识别源对象。如果是另一个人怎么办?