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