如何在不从函数中声明变量的情况下返回解构的对象?

问题描述

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 的评论)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...