JavaScriptの記法に混乱させられます...
filterとmapを使って条件に対するデータのみ抽出し、map関数にて新しい配列として作る
const array = new Array(); // @param string data function addProp(data) { array.push(name: data, valid: false); } function filteredArray() { return array.filter(data => !array.valid).map(newData => newData.name); }
解説
array
は二つのproperty(object)を持つ配列.
filter
はそのarrayの中のdataを見て、valid
がfalseのものだけを抽出する
map
にて、filterされた結果にてproperty(object)のnameの値のみを使って新しい配列を生成している
混乱しがちな仕様:仮引数
filter
や、map
に渡す引数は自由です。
よく、上記の関数に渡されている変数名、一体どこからやってきたんだ... と絶望しそうになるのですが、
ただの仮引数です。なんでもいいです。
例えばforループ時に現在参照している変数名を指定する感じと同じはずです.
filterにはcallback関数を渡せる
22/8/22追記.
混乱したのですが、例えば下記のようなテストコードがある場合.
const numbers = [1,2,3,4]; assert.deepStrictEqual(numbers.filter(moduleName.isDividedByTwo), [2,4]);
実行される側.
function isDividedByTwo(number) { return number % 2 === 0; }
混乱しません?
isDividedByTwo
関数には引数があるのにテストコードにはisDividedByTwo
に引数を渡していません.
これ、filter()
に関数を渡してそこでfilterした結果を渡しています.
こんなこともできるんですね、となったわけであります.
ちなみに、上記は下記の書き方と同じのようです.
numbers.filter(numbers => moduleName.isDividedByTwo(numbers))