javascript - 搜索/过滤嵌套数组 Javascript/Lodash

标签 javascript arrays search filter nested

对于我的 React.js 项目,我想创建一个嵌套数组的搜索过滤器。用户将使用输入字段进行搜索。

    var dataExample = [
  {
    type: "human", details: [
    {id: 1, name: "Peter", description: "friendly, black-hair"},
    {id: 5, name: "Susan", description: "blond"}
      ]
  },

  {
    type: "animal", details: [
    {id: 2, name: "Will", description: "lazy, cute"},
    {id: 3, name: "Bonny", description: "beautiful"}
      ]
  }
];

在我的搜索输入字段中,我想查找“名称”“描述”中的内容。 数组的数据结构应该保持不变。

当我搜索“friendly”“Peter”时,输出应该是:

[
  {
    type: "human", details: [
    {id: 1, name: "Peter", description: "friendly, black-hair"}
      ]
  }
];

现在我尝试了这样的事情:

  let myfilter = dataExample.filter((data) => {
  data.details.filter((items) => {
    return (items.type.indexOf("human") !== -1 ||       //input of user
              items.description.indexOf("friendly"))
  })
})

不幸的是,这不是它的工作原理。有谁能够帮助我? Lodash 也没有问题。非常感谢。

最佳答案

您可以将 array#reducearray#filter 一起使用,并且可以使用 string#incldues 检查您的字词。

const dataExample = [ { type: "human", details: [ {id: 1, name: "Peter", description: "friendly, black-hair"}, {id: 5, name: "Susan", description: "blond"} ] }, { type: "animal",details: [ {id: 2, name: "Will", description: "lazy, cute"}, {id: 3, name: "Bonny", description: "beautiful"} ] } ],
  term = 'Peter',
  result = dataExample.reduce((r, {type,details}) => {
      let o = details.filter(({name,description}) => name.includes(term) || description.includes(term));
      if(o && o.length)
        r.push({type, details : [...o]});
      return r;
  },[]);
console.log(result);

关于javascript - 搜索/过滤嵌套数组 Javascript/Lodash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53248036/

相关文章:

javascript - 按组分组数组并按位置排序

php - 试图了解 array_diff_uassoc 优化

c++ - 当我尝试写入二维数组时出现未处理的异常

java - 删除 Java 二叉搜索树中的方法

mysql - 无法将 mySQL 连接到 Sphinx 搜索

javascript - onclick 函数在 Ajax 加载的按钮中不起作用

javascript - 由于空格反序列化 Json 问题

c++ - 在c++中的特定文本行之间读取文本文件

javascript - 我可以链接 Angular Directive(指令)吗?

java - 程序只会输出else语句