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和数据数组。请添加一些数据和想要的结果。再次感谢你。你的回答对我帮助很大。