【发布时间】:2020-11-05 01:33:26
【问题描述】:
我有一个具有以下结构的对象数组
arr = [ { name: "abc" , items: ["itemA","itemB","itemC"], days :138} ,
{ name: "def" , items: ["itemA1","itemB2","itemC1"], days :157} ,
{ name: "hfg" , items: ["itemAN","itemB7","itemC7"], days :189} ]
此数组需要根据传递的搜索输入进行过滤。我能够为 name 实现相同的效果,其中天数没有被过滤。
也有人可以帮助如何搜索 items 数组,以便它根据传递的输入过滤行
这是我尝试过的
handleSearch = (arr, searchInput) => {
let filteredData= arr.filter(value => {
return (
value.name.toLowerCase().includes(searchInput.toLowerCase()) ||
value.days.toString().includes(searchInput.toString())
);
});
console.log(filteredData);
//this.setState({ list: filteredData });
}
【问题讨论】:
-
我猜你是想写
value.days.toString().includes(searchInput.toLowerCase())? -
但 days 是一个数字,所以尝试在两者上运行 toString
-
过滤内部数组遵循与您已经在做的类似的逻辑,您应该过滤
value.items -
这不是重点,问题是您正在测试
days是否包含days,这是无稽之谈。无论如何,只需使用[item.name, item.items.join(','), item.days].join(',')得到一个逗号分隔的字符串,其中包含所有字符串和日期,然后在上面使用includes() -
是的,但是:1) 谁将在搜索词中添加逗号 2) OP 可以先从搜索词中删除逗号 3) 或使用晦涩的字符
标签: javascript arrays reactjs ecmascript-6 ecmascript-5