JS:对象搜索的嵌套数组 - 部分列表格式

JS: Nested array of objects search - section list format

我有这样一个节列表格式的数组:

const sectionList = [
  {
    caption: 'caption1',
    data: [
      {
        id: '1',
        title: 'Payment',
        description: 'Pay info',
      },
      {
        id: '2',
        title: 'Refund',
        description:
          'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla asperiores corporis, sapiente quasi obcaecati quae totam consequatur cum, perspiciatis pariatur !',
      },
      {
        id: '3',
        title: 'Mobs',
        description:
          'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla asperiores corpori!',
      },
      {
        id: '4',
        title: 'test',
        description:
          'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla',
      },
    ],
  },
  {
    caption: 'caption2',
    data: [
      {
        id: '5',
        title:
          'Lorem ipsum, dolor sit amet consectetur adipisicing elit. Recusandae eveniet?',
        description: 'Custom desc',
      },
    ],
  },
];


// const query = "Custom desc"; // Works fine
const query = 'Lorem ipsum' // Not working

const res = sectionList.filter(d => d.data.every(c => query.includes(c.description)));

console.log(res);

Expected
//  [
//   {
//     caption: 'caption1',
//     data: [
//       {
//         id: '2',
//         title: 'Refund',
//         description:
//           'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla asperiores corporis, sapiente quasi obcaecati quae totam consequatur cum, perspiciatis pariatur !',
//       },
//       {
//         id: '3',
//         title: 'Mobs',
//         description:
//           'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla asperiores corpori!',
//       },
//       {
//         id: '4',
//         title: 'test',
//         description:
//           'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla',
//       },
//     ],
//   }
// ];

基本上,我需要在嵌套数据和 return 结果中实现简单搜索。但是,我不知道如何完善我的解决方案。

如果我搜索 'Lorem ipsum',我没有得到任何结果。

我应该如何更新我当前的解决方案?谢谢!

您需要将内部数组与外部数组分开过滤。此处检查是否包含对内部数组的查询,然后过滤结果以删除空数组。

它对 const query = "Custom desc"; 有效的原因是只有一个数组中有一个元素符合条件,并且它是数组中唯一的元素。

const sectionList = [{ caption: 'caption1', data: [{ id: '1', title: 'Payment', description: 'Pay info', }, { id: '2', title: 'Refund', description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla asperiores corporis, sapiente quasi obcaecati quae totam consequatur cum, perspiciatis pariatur !', }, { id: '3', title: 'Mobs', description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla asperiores corpori!', }, { id: '4', title: 'test', description: 'Lorem ipsum dolor sit amet consectetur adipisicing elit. Dicta et ipsam voluptate commodi nulla', },], }, { caption: 'caption2', data: [{ id: '5', title: 'Lorem ipsum, dolor sit amet consectetur adipisicing elit. Recusandae eveniet?', description: 'Custom desc', },], },];

const query = 'Lorem ipsum' // Not working

const res = sectionList
  .map(d => ({ ...d, data: d.data.filter(c => c.description.includes(query)) }))
  .filter(d => d.data.length)

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: 0; }