根据嵌套对象过滤数组
在 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中文网其他相关文章!