Javascript 如何过滤包含数组数据的对象的数组?
以下是我的数据:Javascript 如何过滤包含数组数据的对象的数组?,javascript,Javascript,以下是我的数据: const sectionDummy = [ { floor: '1', data: ['A', 'B', 'C']}, { floor: '2', data: ['D', 'E', 'F']}, { floor: '3', data: ['G', 'H', 'I']}, ]; 我可以筛选楼层并获得正确的数据: let filterData = []; filterData = sectionDummy.filter(item => { if (item
const sectionDummy = [
{ floor: '1', data: ['A', 'B', 'C']},
{ floor: '2', data: ['D', 'E', 'F']},
{ floor: '3', data: ['G', 'H', 'I']},
];
我可以筛选楼层并获得正确的数据:
let filterData = [];
filterData = sectionDummy.filter(item => {
if (item.floor !== undefined) {
return item.floor.trim().toLowerCase().indexOf(inputValue) >= 0;
}
return {};
});
如果inputValue
为1,我将获得返回数据
console.log(filterData); // [{ floor: 1, data: ['A', 'B', 'C']}]
如果我也要过滤数据数组,我会被它卡住
我试着用地图
let filterData = [];
filterData = sectionDummy.filter(item => {
if (item.floor !== undefined) {
item.data.map((value, index) => {
if(value.trim().toLowerCase().indexOf(inputValue) >=0) {
return value;
} else {
return {};
}
});
}
return {};
});
看起来过滤器和地图数据返回是不同的,所以它不起作用
如何过滤楼层
和数据数组
任何帮助都将不胜感激。您想先按楼层过滤,然后再按数据过滤吗
const sectionDummy=[
{楼层:1,数据:['A','B','C']},
{楼层:2,数据:['D','E','F']},
{楼层:3,数据:['G','H','I']},
];
常数floorFilter=2;
常量数据过滤器='E';
常量filteredData=sectionDummy
.filter(item=>item.floor===floorFilter)
.map(({floor,data})=>({floor,data:data.filter(d=>d==dataFilter)}));
console.log(filteredData)//[{floor:2,data:['E']}]
您可以这样使用:如果搜索文本与floor
匹配,则返回整个部分。否则,如果数据中存在搜索文本
,则返回带有过滤数据
数组的节对象
const sectionDummy=[
{楼层:“1”,数据:['A','B','C']},
{发言:“2”,数据:['D','E','F']},
{楼层:“3”,数据:['G','H','I']},
];
常量筛选器=(节,搜索文本)=>{
searchText=searchText.trim().toLowerCase();
返回部分.reduce((acc,{floor,data})=>{
如果(楼层===搜索文本){
acc.push({楼层,数据})
}否则{
const filtered=data.filter(d=>d.toLowerCase().includes(searchText))
如果(过滤的长度>0)
acc.push({楼层,数据:已过滤})
}
返回acc;
}, [])
}
console.log(过滤器(部分“A”))
控制台日志(过滤器(虚拟部分,“G”))
console.log(filter(sectionDummy,“1”)
您可以通过检查floor
和inputValue
进行过滤,并将对象视为两个值相等
let filterData = searchBuildings.filter(({ floor }) => floor === inputValue);
item.floor
看起来是一个整数,因此对其调用.trim()
将抛出错误。。?(或者sectionDummy
与searchBuildings
不同)为什么不使用sectionDummy.filter(item=>item.floor==1)
?。filter需要一个布尔值作为回调的返回值返回{}
的原因是为了过滤数据数组,您可以使用array#some
或array#includes
。感谢您的回答,答案非常清楚。我想按楼层和数据进行过滤。它的用户类型是D
我仍然可以得到[{floor:2,data:['D','E','F']}]
,所以我用| |更改&&但我得到了一个空对象。你能给我一些建议吗?谢谢。这是否意味着只能设置一个筛选器?使用.filter({floor,data})=>floor==floorFilter | | data.some(d=>d==dataFilter))
和const floorFilter=undefined
它实际上可以工作……是的,它现在可以工作了。因为我的数据数组不是bc,它就像['Mcdonalds','StarBuckts',],所以我必须尝试比较所有的字符串。非常感谢@ttulka!试试这个:.filter(({floor,data})=>floor===filter | | data.some(d=>d==filter | | String(d).charAt(0)==filter))
谢谢你的回复,我想同时过滤floor和数据数组。请添加一些数据和想要的结果。再次感谢你。你的回答对我帮助很大。