函数调用的对象分解

Ant*_*osa 7 javascript function object typescript ecmascript-6

有没有一种方法可以就地解构JS对象,而不是将解构后的变量分配给作用域?

而不是这样做:

const { a, b, c } = obj;
someFunction(a, b, c);
Run Code Online (Sandbox Code Playgroud)

我想这样做:

someFunction({a, b, c} from obj);
Run Code Online (Sandbox Code Playgroud)

或功能上等效的东西。

我想在有以下两个规定的情况下执行此操作:

  • 我不想将变量名放入封闭范围。

  • 我不想传递整个对象obj,因此使散布运算符不是一个选择。

我剩下的唯一选择是使用

someFunction(obj.a, obj.b, obj.c);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这很好,但是当obj它是长标识符时,可能会降低可读性。

这样的事情可能吗?我想作为一个解决方法表达式中使用赋值,但我的IDE抱怨说,找不到名称ab以及c

someFunction({a, b, c} = obj);
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 6

一种选择是用于.map提取所需的每个属性的值,并将其传播到参数列表中:

someFunction(
  ...['a', 'b', 'c'].map(prop => obj[prop])
);
Run Code Online (Sandbox Code Playgroud)

不幸的是,解构需要创建中间变量,而您不需要。

  • 性能几乎不必担心-在99%的情况下,代码的可读性更为重要,如果您想保持代码DRY并希望能够将模式用于任意数量的属性,我很确定这是您将能够找到的最佳模式。如果由于太冗长而使代码审查失败,那么我认为这表明代码审查存在问题,而不是这里的代码存在问题 (4认同)

Jac*_*ord 5

IIFE 应该工作:

((({ a, b, c }) => someFunction(a, b, c))(obj);
Run Code Online (Sandbox Code Playgroud)