javascript - 如何从具有 2 个级别的 json 中搜索值作为来自两个对象的返回匹配项?

标签 javascript angular

我有一个对象数组,它有一个内部数组,需要过滤并根据两者的匹配返回数组。搜索是(输入)事件,它在每次按键时执行。
stackblitz 链接 stackblitz

 list = [
          {
            id: 'abc',
            data: [
              { key: '1', value: 'car' },
              { key: '2', value: 'bus' },
              { key: '3', value: 'bike' },
              { key: '4', value: 'truck' },
              { key: '5', value: 'jeep' },
            ],
          },
          {
            id: 'def',
            data: [
              { key: '1', value: 'car' },
              { key: '2', value: 'bicycle' },
              { key: '3', value: 'train' },
              { key: '4', value: 'aeroplane' },
              { key: '5', value: 'jeep' },
            ],
          },
        ];
 handleSearch = (event) => {
    if (event.target.value.length > 0) {
      const item = this.list[0].data.filter((items) =>
        items.value.toLowerCase().includes(event.target.value.toLowerCase())
      );
      this.list[0].data = item;
    } else {
      this.list[0].data = this.orgList;
    }
  };
期待输出
input = car

output = [
  {
    id: 'abc',
    data: [
      { key: '1', value: 'car' },
    ],
  },
  {
    id: 'def',
    data: [
      { key: '1', value: 'car' },
    ],
  },
];

input = truck

output = 
[
  {
    id: 'abc',
    data: [
      { key: '4', value: 'truck' },
    ],
  },
];

最佳答案

const list = [{id: 'abc',data: [{ key: '1', value: 'car' },{ key: '2', value: 'bus' },{ key: '3', value: 'bike' },{ key: '4', value: 'truck' },{ key: '5', value: 'jeep' },],},{id: 'def',data: [{ key: '1', value: 'car' },{ key: '2', value: 'bicycle' },{ key: '3', value: 'train' },{ key: '4', value: 'aeroplane' },{ key: '5', value: 'jeep' },],},];


function search(arr, searchVal) {
    return arr.map((item) => {
        const data = item.data.filter(({ value }) => value === searchVal);
        return { ...item, data };
      })
      .filter(({ data }) => data.length);
}


console.log(search(list, 'car'));
console.log(search(list, 'truck'));
.as-console-wrapper { max-height: 100% !important; top: 0 }

Angular demo

关于javascript - 如何从具有 2 个级别的 json 中搜索值作为来自两个对象的返回匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69355921/

相关文章:

angular - 如何防止angular2中的DOM替换ngFor angularfire2中的异步?

javascript - 通过 Javascript 使用 iFrame 替换多个链接时遇到问题

javascript - HTML,试图在左侧创建一个滑动菜单(附截图)

validation - Angular2/ Material 2 : md-input-container label is not resetting float when value is changed programmatically

angular - 如何只在需要时加载 Zone.js

javascript - 为适应现有 Angular 应用程序的 RTL 而测试的方法

javascript - 来自环境变量的Angular 2 base href

javascript - 如何将图片从网址上传到 Google 云端硬盘?

javascript - 带有 SoundManager 的 Soundcloud API 不返回peakData

javascript - jQuery 如何从字符串中删除多个空格