Javascript 在数组中的对象属性中搜索字符串

Javascript 在数组中的对象属性中搜索字符串,javascript,Javascript,我试图提取数组中的对象,该数组的nameproperty包含一个关键字。我可以通过遍历数组来实现这一点,但我想看看是否有更有效的方法来实现这一点 以下是我的数组和其中的对象的外观: [ { "accountId": 123, "items": [ { "id": 1, "name": "Property XYZ" }, { "id": 2,

我试图提取数组中的对象,该数组的
name
property
包含一个关键字。我可以通过遍历数组来实现这一点,但我想看看是否有更有效的方法来实现这一点

以下是我的数组和其中的对象的外观:

[
  {
     "accountId": 123,
     "items": [
        {
           "id": 1,
           "name": "Property XYZ"
        },
        {
           "id": 2,
           "name": "Gadget 1"
        }
     ]
  },
  {
     "accountId": 234,
     "items": [
        {
           "id": 7,
           "name": "Property ABC"
        },
        {
           "id": 8,
           "name": "Property QWERTY"
        }
     ]
  }
]
有两个目标,一个稍微简单一点:

  • 我只想返回那些
    name
    property
    包含关键字“property”的对象
  • 与上面的条件相同,但我希望包括返回包含我要查找的对象的父对象
  • 因此,第一个需求的输出如下所示:

    [
       {
          "id": 1,
          "name": "Property XYZ"
       },
       {
          "id": 7,
          "name": "Property ABC"
       },
       {
          "id": 8,
          "name": "Property QWERTY"
       }
    ]
    
    [
       {
          "accountId": 123,
          "items": [
             {
                "id": 1,
                "name": "Property XYZ"
             }
          ]
       },
       {
          "accountId": 234,
          "items": [
             {
                "id": 7,
                "name": "Property ABC"
             },
             {
                "id": 8,
                "name": "Property QWERTY"
             }
          ]
       }
    ]
    
    第二个需求的输出如下所示:

    [
       {
          "id": 1,
          "name": "Property XYZ"
       },
       {
          "id": 7,
          "name": "Property ABC"
       },
       {
          "id": 8,
          "name": "Property QWERTY"
       }
    ]
    
    [
       {
          "accountId": 123,
          "items": [
             {
                "id": 1,
                "name": "Property XYZ"
             }
          ]
       },
       {
          "accountId": 234,
          "items": [
             {
                "id": 7,
                "name": "Property ABC"
             },
             {
                "id": 8,
                "name": "Property QWERTY"
             }
          ]
       }
    ]
    

    除了遍历整个数组并将我正在寻找的对象的副本推送到一个新数组中,还有其他方法吗?

    Javascript数组方法非常强大,通过链接它们,您可以非常轻松地获得这两个结果。这里最有用的是:

    • 用于从原始列表中构建“项”数组
    • 与上面相同,但不需要展平结果数组
    • 用于删除不符合条件的项目
    这样,您的第一个条件可以通过以下步骤完成:

  • 从每一位家长那里构建一个“项目”列表
  • 筛选该列表以仅包括符合条件的列表
  • 第二,您可以执行以下操作:

  • 创建一个包含父项副本的新数组,但其中每个父项的项仅过滤为满足条件的项
  • 筛选出在上述步骤之后没有任何项目的家长
  • 因此,您可以非常简洁地编写这两个新数组:

    const myArray=[{
    “帐户ID”:123,
    “项目”:[{
    “id”:1,
    “名称”:“属性XYZ”
    }, {
    “id”:2,
    “名称”:“小工具1”
    }]
    }, {
    “帐户ID”:234,
    “项目”:[{
    “id”:7,
    “名称”:“财产ABC”
    }, {
    “id”:8,
    “名称”:“财产QWERTY”
    }]
    }]
    //仅限名称属性包含关键字“property”的对象。
    const onlyWithProperty=myArray
    .flatMap(元素=>elem.items)
    .filter(item=>item.name.includes(“属性”))
    //只有那些具有名称属性包含关键字“property”的项的父对象。
    const only parentswithproperty=myArray
    .map(elem=>({…elem,items:elem.items.filter(item=>item.name.includes(“属性”))}))
    .filter(elem=>elem.items.length);
    log(“第一个请求:”,仅限WithProperty);
    
    log(“第二个请求:”,仅限ParentsWithProperty)谢谢!真的很强大!一个后续问题:新数组是否正确?也就是说,它们不会影响原始
    myArray
    中的任何值。实际上,我在文档中看到了答案。它们是新的阵列。再次感谢!是和否。阵列本身是浅拷贝。更改数组本身不会修改原始项,但更改数组中的项也会更改原始项。知道了。再次感谢!