[英]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.