首页 > web前端 > js教程 > 正文

如何过滤 JavaScript 数组中的嵌套对象并仅保留匹配的元素?

Barbara Streisand
发布: 2024-10-28 16:10:08
原创
759 人浏览过

How to Filter Nested Objects in JavaScript Arrays and Keep Only Matching Elements?

根据嵌套对象过滤数组

在 JavaScript 中,你可能会遇到需要根据值过滤对象数组的场景嵌套属性。为此,您可以利用强大的过滤技术。

考虑问题中提供的示例,其中目标是根据嵌套的“subElements”数组中的特定姓氏值来过滤元素数组。输入数组定义如下:

<code class="js">let arrayOfElements = [
    {
       "name": "a",
       "subElements": [
          {"surname": 1},
          {"surname": 2}
       ]
    },
    {
       "name": "b",
       "subElements": [
          {"surname": 3},
          {"surname": 1}
       ]
    },
    {
       "name": "c",
       "subElements": [
          {"surname": 2},
          {"surname": 5}
       ]
    }
];</code>
登录后复制

要过滤此数组并仅检索“subElements”数组包含“surname”设置为 1 的对象的元素,可以使用“ filter”和“some”方法:

<code class="js">let filteredArray = arrayOfElements.filter((element) => element.subElements.some((subElement) => subElement.surname === 1));</code>
登录后复制

但是,这种方法的问题是它返回带有所有“子元素”的对象,包括那些不匹配过滤条件的对象。要解决这个问题,您可以使用“map”函数和展开运算符:

<code class="js">filteredArray = arrayOfElements.map((element) => {
  return {...element, subElements: element.subElements.filter((subElement) => subElement.surname === 1)}
})</code>
登录后复制

这里,展开运算符(即“...element”)用于创建一个基于对象的新对象在原始“元素”上,同时使用过滤结果覆盖其“subElements”属性。这种方法允许您过滤掉不需要的“子元素”,同时保留原始数组的结构。生成的“filteredArray”将包含所需的对象,其“子元素”根据“姓氏”标准进行过滤:

<code class="js">[
    {
        "name": "a",
        "subElements": [
           {"surname": 1}
        ]
    },
    {
        "name": "b",
        "subElements": [
           {"surname": 1}
        ]
    }
]</code>
登录后复制

以上是如何过滤 JavaScript 数组中的嵌套对象并仅保留匹配的元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!