2017-03-28 10 views
0

私はこの構成に困惑します。公開されたnpmモジュールのものです。著者は彼のjavascriptを知っているようだ。モジュールのバージョンはモジュール内で数回表示されます。困惑のjavascript配列の構文

[].concat(opts['boolean']).filter(Boolean).forEach(function(key){ 
    flags.bools[key] = true; 
}); 

それは、元の配列ともメンバー「ブール」が最初から知られている理由だけではなく、変更されませんので:たぶん、このための

opts.boolean.filter(Boolean).forEach(.... 
+2

'opts ['boolean']' *おそらく*はn配列をフィルタリングまたはマップすることはできません。 –

+1

作者はおそらく省略形が非正規のArrayオブジェクトに対して '.concat'を呼び出さないようにしたいと考えていますが、' .filter() 'は本当の値を保持するので、' opts.boolean'が普通のオブジェクトであれば'flags.bools [" [object Object] "] = true;'を実行します。おそらく著者はそれでOKですが、それは最良のアプローチのようには思えません。 –

+0

IMO、もっと良い方法は 'if(Array.isArray(opts.boolean)){opts.boolean.filter(Boolean).forEach(...)}' –

答えて

1

を:

[].concat(undefined) // => [undefined]

undefined.filter(...) // => ERROR