javascript - 数组中的对象 数组中的对象 数组中的对象 JavaScript - 搜索

我有这样的数据:

   const bigData = [
  {
    id: '1',
    data: [
      {category: 'swim', value: 'Abc'},
      {category: 'ran', value: '123'},
      {category: 'play', value: 'Test'}
    ]
  },
  {
    id: '2',
    data: [
      {category: 'swim', value: 'Abc'},
      {category: 'ran', value: ''},
      {category: 'play', value: 'abc'}
    ]
  },
  {
    id: '3',
    data: [
      {category: 'swim', value: 'String that I Need'},
      {category: 'ran', value: '456'},
      {category: 'play', value: 'Testtest'}
    ]
  }
]

如果其中一个对象的值中包含字符串的一部分,我想获取对象数组。

例如,如果搜索字符串是“String tha”,它应该返回

   [ {
    id: '3',
    data: [
      {category: 'swim', value: 'String that I Need'},
      {category: 'ran', value: '456'},
      {category: 'play', value: 'Testtest'}
    ]
  }]

如果搜索字符串是“Abc”,它应该返回

[{
        id: '1',
        data: [
          {category: 'swim', value: 'Abc'},
          {category: 'ran', value: '123'},
          {category: 'play', value: 'Test'}
        ]
      },
      {
        id: '2',
        data: [
          {category: 'swim', value: 'somethinf'},
          {category: 'ran', value: ''},
          {category: 'play', value: 'Abcd'}
        ]
      },]

这是我目前所拥有的,不确定它是否是正确的方向:

const arr = bigData.map(
      (item) => item.data
    )
    const res = arr
      ?.map((item) => item.map((e) => e.value))
      .filter((i) => i.map((e) => e.includes(search) === true))

最佳答案

没有理由将外部数组 map() 到每个对象的 data 成员,因为返回值和输入值具有相同的布局。相反,您在外部数组 bigData 上执行 filter(),它应该保留其内部数组成员 data 满足特定条件的对象。

您可以使用 some() 检查该条件,因为它应用于数组的每个元素,您只关心是否存在匹配的元素。

function filterBySearch (search) {
  return bigData.filter(
    ({ data }) => data.some(
      ({ value }) => value.includes(search)
    )
  );
}

const bigData = [
  {
    id: '1',
    data: [
      {category: 'swim', value: 'Abc'},
      {category: 'ran', value: '123'},
      {category: 'play', value: 'Test'}
    ]
  },
  {
    id: '2',
    data: [
      {category: 'swim', value: 'Abc'},
      {category: 'ran', value: ''},
      {category: 'play', value: 'abc'}
    ]
  },
  {
    id: '3',
    data: [
      {category: 'swim', value: 'String that I Need'},
      {category: 'ran', value: '456'},
      {category: 'play', value: 'Testtest'}
    ]
  }
];

console.log(filterBySearch('String tha'));
console.log(filterBySearch('Abc'));
.as-console-wrapper{max-height:100%!important;}

https://stackoverflow.com/questions/60065796/

相关文章:

reactjs - SWR vs Isomorphic-unfetch 用于数据获取 Next.Js

c++ - 错误 : cannot add a default template argument

python - 如何计算具有特定扩展名或名称的文件中的文件数?

reactjs - 使用 react-sortable-hoc 拖动时丢失 tr 元素的样式

r - 提取第n个字符直到R中的字符串结尾

php - 是否有一个 Wordpress php 函数可以只返回自定义 Logo 图像的 URL(

python - Pyspark - 将多列数据组合成一个跨行分布的列

php - 如何从时间戳对象和日期时间对象数组中提取值

javascript - 使用 axios 使用 get 方法发送嵌套的 json 数据

reactjs - react 导航 v5 中的 tabBarIcon 问题