2016-03-11 76 views
1

在我的項目中,我經常發現自己正在檢查值是否爲數組。將單個值轉換爲數組

如果該值不是一個數組,我從它創建一個單元數組。

如果值爲undefinednull,我創建一個空數組。

值本身通常是任一對象的陣列或單個對象或undefined

const array = value ? (Array.isArray(value) ? value: [value]) : []; 

是否有這樣做(也許lodashunderscore)的更簡潔的方式,在我決定考慮此因素到一個單獨的實用功能?

回答

3

你可以做

var eventsArray = events ? [].concat(events) : []; 

.concat()函數接受兩個數組和個別參數,所以無論哪種方式,你最終你想要什麼。

1

因爲您在代碼中使用const我假設您使用的是ES2015/ES6。如果沒有值或未定義傳遞,ES1015的 Default function parameters允許使用默認值初始化形式參數。

function abc(value = []) { 

    const array = Array.isArray(value) ? value: [value]; 

} 
+1

如果傳遞未定義或爲空,值參數設置爲空數組 – Darshan

+0

酷,我不知道 – krl

+0

@RolandStarke感謝指出 – Darshan

1

下面是使用lodash的castArrayisNil的解決方案都在一個mixin包裹起來:

_.mixin({'asArray' : function(value){ 
    return _.isNil(value) ? [] : _.castArray(value); 
}}); 

用法:

_.asArray(null)  -> [] 
_.asArray(undefined) -> [] 
_.asArray(0)   -> [0] 
_.asArray(false)  -> [false] 
_.asArray([1,2,3]) -> [1,2,3] 
_.asArray('wibble') -> ['wibble'] 
1

如果使用ES6,你能做到以下幾點,這是比.concat()更清潔;

function method(value = []) { 
    const array = [...value]; 
}