簡體   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