JSを使用して複数の属性を除外するマルチフィルター関数を作成するにはどうすればよいですか?

Aug 21 2020

フィルタリングするオブジェクトの配列

[
  {
    "name": "Apple",
    "age": 24,
    "model": "Android",
    "status": "Under development",
  },

  {
    "name": "Roboto",
    "age": 24,
    "model": "Apple",
    "status": "Running",
  },
  
  .
  .
  .
  .
 
]  

JSフィルターメソッドを使用して複数のパラメーターを使用して配列をフィルター処理する必要があります。私は部分的な解決策を持っていて、期待される出力を得ることができませんでした(それに固執しました)。

ここで、フィルターは1つの属性に対して複数の値でも機能する必要があります。例:age = 54,23またはmodel = Android、Appleなど。

簡単に言うと、eコマースサイトのようにフィルターの動作を模倣しようとしています。このサイトでは、製品のすべての属性と顧客が選択したタグを比較して、フィルター処理された製品のリストを出力できます。

どんな助けでもかなりです。ありがとう!

回答

3 trincot Aug 21 2020 at 10:49

フィルタ条件をデータ配列内のオブジェクトと同じようにフォーマットするが、値は可能な値の配列である場合、filter次のようにメソッドを使用できます。

let data = [
  {
    "name": "Apple",
    "age": 24,
    "model": "Android",
    "status": "Under development",
  }, {
    "name": "Roboto",
    "age": 24,
    "model": "Apple",
    "status": "Running",
  }, {
    "name": "Samsung",
    "age": 26,
    "model": "Blueberry",
    "status": "Running",
  },
];

let filter = {
    "name": ["Roboto", "Ericsson"],
    "age": [22, 24, 26],
};

let res = data.filter(obj =>
    Object.entries(filter).every(([prop, find]) => find.includes(obj[prop])));
    
console.log(res);