фильтровать дочерний объект по значению поиска - PullRequest
1 голос
/ 12 июля 2020

У меня есть поле поиска, где пользователь может ввести любое слово, чтобы получить желаемый результат. мой объект выглядит ниже

[{
  "parentid":100,
  "parentname":"A",
  "child" : [
       {
          "childid": 1,
          "childname": "X1",
       },
       {
          "childid": 2,
          "childname": "X2",
       }]
  },
  {
  "parentid":200,
  "parentname":"B",
  "child" : [
       {
          "childid": 3,
          "childname": "X3",
       },
       {
          "childid": 4,
          "childname": "X4",
       }]
  }
]

Если значение поиска X4, я должен получить результат ниже

{
      "parentid":200,
      "parentname":"B",
      "child" : [
           {
              "childid": 3,
              "childname": "X3",
           },
           {
              "childid": 4,
              "childname": "X4",
           }]
      } 

то, что я пробовал до сих пор, это

//this works if user search for parentname
onSearchChange(searchValue: string): void {  
    this.result = this.originalList.filter(f=>f.parentname.indexOf(searchValue) !== -1);
  }

//I tried below to search for parentname or childname, but no luch
onSearchChange(searchValue: string): void {  
    this.result = this.originalList.filter(f=>f.parentname.indexOf(searchValue) !== -1 ||
                      f.child.foreach(y=>y.childname.indexOf(searchValue) !== -1));
  }

Ответы [ 2 ]

1 голос
/ 12 июля 2020

let arr= [{
  "parentid":100,
  "parentname":"A",
  "child" : [
       {
          "childid": 1,
          "childname": "X1",
       },
       {
          "childid": 2,
          "childname": "X2",
       }]
  },
  {
  "parentid":200,
  "parentname":"B",
  "child" : [
       {
          "childid": 3,
          "childname": "X3",
       },
       {
          "childid": 4,
          "childname": "X4",
       }]
  }
];

let filteredArray = arr.filter((element) => element.child.some((child) => child.childname == "X4"));

console.log(filteredArray);
1 голос
/ 12 июля 2020
this.result = this.originalList.filter(f => 
  f.parentname.includes(searchvalue) ||
  f.child.some(c => c.childname.includes(searchvalue))
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...