次のコードでは、文字列 "option"で始まるキーに割り当てられた値のみを抽出します。ただし、.map()は値の代わりにオブジェクトキーの配列を返します。キーが条件に一致する場合のみPOJO値を抽出する
var x = {
one : 100,
option1 : 'A',
option2 : 'B',
opt : 'C'
}
var y = Object.keys(x).filter(key => {
if (key.match(/^option\d*$/)) {
return x[key]
}
})
console.log(y) // returns ["option1", "option2"], should be ['A', 'B']
あなたはフィルタを混同してマッピングすることがありますか? Filterは、与えられた述語関数が真理値を返す項目の配列を生成します。あなたのケースでは、optionで始まるキーの対応する値を返します。値は真実になります。最初にフィルターをかけ、キーを値にマップする必要があります。 –
@IljaEverilä:filter/mapを使用する代わりに、reduceを使うことができます。そうすれば、配列を1回だけ反復し、2回繰り返すことはありません。 – XerxesNoble