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; }
我有这样一个节列表格式的数组:
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; }