JS对象解构而不定义变量名

时间:2018-01-21 16:12:24

标签: javascript ecmascript-6 object-destructuring

在ES6 JS中解构对象时,可以使用{ a, b }语法分别从该对象创建名为ab的新变量。但是,据我所知,没有办法让对象的键自动创建具有这些名称的本地范围的变量。在以下示例中,我希望能够使用const {} = args;的假设伪代码,它会自动生成const aconst b

const bar = { a: 'apple', b: 'ball' };

const foo = (args) => {
  const { a, b } = args;
  console.log(a, b); // Great!
  const {} = args;   // I am aware this isn't valid syntax...
  console.log(a, b)  // Because of course, it doesn't work.
};

foo(bar);

原因纯粹是因为,在这个MCVE之外,我实际上正在使用带有几十个键的大量对象,并且我希望将其中的某些值传递到下一部分承诺链。我当然可以使用{ a: args.a, b: args.b },但我正在努力寻找最简洁,最干净的方法。我想我真正要求的是PHP的extract() - 类似语法,但在ES6 JS中。

这可能吗?

Ps,我知道如果对象的内容不受信任,这可能会被视为一个非常糟糕的主意。

PPS。我正在测试它的环境是Node 7.9.0

1 个答案:

答案 0 :(得分:0)

如果您想对密钥执行某些操作但又不想定义密钥,为什么不使用Object.keysObject.entries

const foo = (args) => {
  Object.entries(args).forEach(([key, value]) => {
    console.log(key, value);
  });
};

foo(bar);