1. ホーム
  2. ジャバスクリプト

[解決済み】配列のマップとフィルタの同時実行

2022-04-03 22:30:16

質問

オブジェクトの配列があり、それを反復して新しいフィルタリングされた配列を作成したい。しかし、私はパラメータに応じて新しい配列からオブジェクトのいくつかをフィルタリングする必要があります。私はこれを試しています。

function renderOptions(options) {
    return options.map(function (option) {
        if (!option.assigned) {
            return (someNewObject);
        }
    });   
}

そのやり方で良いのでしょうか?もっといい方法はないでしょうか?lodashなど、どのようなライブラリを使ってもかまいません。

どのように解決するのですか?

を使用する必要があります。 Array.reduce を使用します。

var options = [
  { name: 'One', assigned: true }, 
  { name: 'Two', assigned: false }, 
  { name: 'Three', assigned: true }, 
];

var reduced = options.reduce(function(filtered, option) {
  if (option.assigned) {
     var someNewValue = { name: option.name, newProperty: 'Foo' }
     filtered.push(someNewValue);
  }
  return filtered;
}, []);

document.getElementById('output').innerHTML = JSON.stringify(reduced);
<h1>Only assigned options</h1>
<pre id="output"> </pre>


別の方法として、reducerは次のような純粋な関数にすることができます。

var reduced = options.reduce(function(result, option) {
  if (option.assigned) {
    return result.concat({
      name: option.name,
      newProperty: 'Foo'
    });
  }
  return result;
}, []);