2016-10-14 30 views
2

我希望能夠用三元賦值來解構函數參數。是否可以使用三元賦值來解構函數參數?

const fn = (size ? 'large' : 'small') => [ 
    `lots${size}`, 
    `of${size}`, 
    `values${size}`, 
]; 

fn(true); // imageLarge 
fn(); // imageSmall 
+0

這不是 '解構',甚至不是默認爲一定的價值,你只是有一個函數根據參數返回一些值*。 – Azamantes

回答

1

你可以做,使用默認參數:

const fn = (isLarge, size = isLarge ? 'large' : 'small') => [ 
 
    `lots${size}`, 
 
    `of${size}`, 
 
    `values${size}`, 
 
]; 
 

 
console.log(fn(true)); 
 

 
console.log(fn(false));

+3

雖然有效,但使用它並不(非常)安全,因爲第二個參數的隨機內容會破壞函數的意圖。 –

+0

事實上,你可以使用類似lodash的['_.ary()'](https://lodash.com/docs/4.16.4#ary)來限制允許的參數數量。 –

+1

這很不好,但很好,很好!沒有意識到這項任務是進步的。我不會在產品中使用這段代碼,但很有趣 –

2

不,您可以將其移動到模板文字中。

const fn = size => `image${size ? 'large' : 'small'}`; 

用例保持size

const fn = size => ((x = size ? 'large' : 'small') => [ 
 
    `lots${x}`, 
 
    `of${x}`, 
 
    `values${x}` 
 
])(); 
 

 
console.log(fn(true)); 
 
console.log(fn());

+0

更新了上面的用例,我想三元函數在函數中被重用 –

2

您需要將Template literal內移動三元運算符。

const fn = (size) => `image${size ? 'large' : 'small'}`; 
 

 
console.log(fn(true)); // imageLarge 
 
console.log(fn()); // imageSmall


更新:在第二種情況下更新該函數內的尺寸值。

const fn = (size) => size = size ? 'large' : 'small', [ 
 
    `lots${size}`, 
 
    `of${size}`, 
 
    `values${size}`, 
 
]; 
 

 
console.log(fn(true)); 
 
console.log(fn());

+0

更新了上面的用例,我想三元函數在函數中被重用 –

+1

聰明地使用了逗號運算符。我不得不刪除我的答案的一部分,說它不能作爲一個單一的線程完成。 :) – Barmar

+0

你不需要arg周圍的parens,當它是一個,滴2個字符! –

0

不,你需要設置函數內一個新的變量,如果你不想重複三元。

const fn = islarge => { 
 
    var size = islarge ? 'large' : 'small'; 
 
    return [ 
 
    `lots${size}`, 
 
    `of${size}`, 
 
    `values${size}`, 
 
    ]; 
 
}; 
 

 
console.log(fn(true)); 
 
console.log(fn());

相關問題