数组内部对象数组内部对象JavaScript-搜索
我有这样的数据: 如果其中一个对象的值中包含字符串的一部分,我希望获取对象数组 例如,如果搜索字符串是“string tha”,它应该返回数组内部对象数组内部对象JavaScript-搜索,javascript,arrays,object,Javascript,Arrays,Object,我有这样的数据: 如果其中一个对象的值中包含字符串的一部分,我希望获取对象数组 例如,如果搜索字符串是“string tha”,它应该返回 [ { id: '3', data: [ {category: 'swim', value: 'String that I Need'}, {category: 'ran', value: '456'}, {category: 'play', value: 'Testtest'} ] }]
[ {
id: '3',
data: [
{category: 'swim', value: 'String that I Need'},
{category: 'ran', value: '456'},
{category: 'play', value: 'Testtest'}
]
}]
[{
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'}
]
},]
如果搜索字符串为“Abc”,则应返回
[ {
id: '3',
data: [
{category: 'swim', value: 'String that I Need'},
{category: 'ran', value: '456'},
{category: 'play', value: 'Testtest'}
]
}]
[{
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))
最简单的方法是Patrick已经提供的一行程序。您走的是正确的道路,但只是在正确使用数组函数时被绊倒了。如果您想将其作为函数编写,它将如下所示:
function searchBigData(bigData, searchText) {
return bigData.filter(entry => entry.data.some(item => item.value.includes(searchText)));
}
供将来参考,这里的基本策略是:
filter
,因为您希望将其减少到满足条件的原始对象数据
数组使用some
。只要数据
中的一项与条件匹配,它就会返回true数据
中的每个项目的值
以包含搜索文本没有理由将外部数组映射到每个对象的
数据成员,因为返回值和输入值具有相同的布局。相反,您正在外部数组bigData
上执行一个函数,它应该保留其内部数组成员data
满足特定条件的对象
您可以使用检查该条件,因为它应用于数组的每个元素,并且您只关心是否存在匹配的元素
函数过滤器搜索(搜索){
返回bigData.filter(
({data})=>data.some(
({value})=>value.includes(搜索)
)
);
}
常量bigData=[
{
id:'1',
数据:[
{类别:'swim',值:'Abc'},
{类别:'ran',值:'123'},
{类别:'play',值:'Test'}
]
},
{
id:'2',
数据:[
{类别:'swim',值:'Abc'},
{类别:'ran',值:'},
{类别:'play',值:'abc'}
]
},
{
id:'3',
数据:[
{category:'swim',value:'我需要的字符串'},
{类别:'ran',值:'456'},
{类别:'play',值:'Testtest'}
]
}
];
log(filterBySearch('stringtha');
log(filterBySearch('Abc')代码>
.as控制台包装{max height:100%!important;}
const arr=bigData.filter({data})=>data.some({value})=>value.includes(search))代码>是!!!它是有效的,这是正确的,公正的回答@帕特里克罗伯茨