繁体   English   中英

ES6 / TS:函数调用中的对象分解

[英]ES6/TS: Object destructuring in function call

在函数调用中实现对象分解的巧妙的ES6 + / TS速记是什么?

假设一个Javascript函数被广泛使用并且不能更改其签名

const foo = (b, a) => console.log(b, a);
foo(66,55);                  // 66, 55

还有一个用于为调用参数提供值的对象

const o = {a: 55, b: 66 };
foo(o.b, o.a);               // 66, 55       <-- can we find a short-hand ?    

一些电话没有达到目标

    foo(...Object.values(o)) // 55, 66 (no, JS object keys are unordered by definition)
    foo(...o);               // TypeError (short, but not valid, illustration only)
    foo(({b, a} = o));       // {a: 55, b: 66} undefined (no error, but we want 66, 55)

如果无法更改函数的符号性,则必须以正确的顺序用每个参数调用它。

对于对象解构,这是不可能的,因为地图没有任何顺序。

您可以使用apply做类似的事情:

foo.apply(null, Object.values(o));

但是您不能保证值的顺序。

function foo(a,b){return a*b-a}
foo(3,1) // => 0
foo(1,3) // => 2
var o1 = {a:3,b:1}
foo.apply(null,Object.values(o1)) // => 2
var o2 = {b:3, a:1}
foo.apply(null,Object.values(o2)) // => 0

因此,没有任何机智的方法可以做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM