JS를 사용하여 여러 속성을 필터링하는 다중 필터 기능을 만드는 방법은 무엇입니까?

Aug 21 2020

필터링 할 개체 배열

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

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

JS 필터 방법을 사용하여 여러 매개 변수를 사용하여 배열을 필터링해야합니다. 나는 부분적인 해결책을 얻었고 예상되는 출력을 얻지 못했습니다.

여기서 필터는 단일 속성에 대한 여러 값으로도 작동해야합니다. 예 : age = 54,23 또는 model = Android, Apple 등

간단히 말해서, 저는 제품의 모든 속성과 고객이 선택한 태그를 비교하여 필터링 된 제품 목록을 출력 할 수있는 전자 상거래 사이트와 같은 필터 작동을 모방하려고합니다.

어떤 도움이라도 감사합니다. 감사!

답변

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);