问题描述
const obj = {
'0': '100','1': '0','2': '0'
};
console.log("defaultObj",obj);
const test1 = () => {
return {
0: amount,1: balance,2: products
} = obj;
};
const test2 = () => {
const {
0: amount,2: products
} = obj;
return {
amount,balance,products
}
};
console.log("test1",test1());
console.log("test2",test2());
输出是
defaultObj { '0': '100','2': '0' }
test1 { '0': '100','2': '0' }
test2 { amount: '100',balance: '0',products: '0' }
那么test1和test2有什么区别?
如何返回一个解构的对象而不像在 test2 中那样将它们声明为变量。
所需的输出是通过立即返回解构对象将 test1 输出转换为 test2
不将它们声明为变量是否有可能的解决方案?
解决方法
test1 和 test2 有什么区别?
赋值表达式总是返回右边的值。无论 return (… = obj2)
是什么,obj2
都将始终返回 …
值。
如何返回一个解构的对象而不将它们声明为变量?
您似乎对解构的作用感到困惑。没有“解构对象”这样的东西,当你解构对象时,它不再是一个对象。它的个别部分被分配给普通变量。
在您的 test2
函数中,您然后使用来自这些变量的值创建一个新对象,使用具有速记语法的对象字面量。
没有办法将解构目标和对象字面量组合成一个表达式。
如果您不想通过解构引入单个变量(在参数声明中或单独的变量声明中),只需像往常一样直接访问参数对象属性:
function test3(obj) {
return { amount: obj[0],balance: obj[1],products: obj[2] };
}
(摘自@user3840170 的评论)