![](/img/trans.png)
[英]Filter a Javascript array to check specific value in all nested objects
[英]JavaScript filter through array of objects with a nested array and check for variable match within nested array
我有一个对象数组,其中一个属性是一个没有键的值数组,我正在尝试过滤并检查嵌套数组中的匹配值。 这是一个对象的示例:
[ 0:
{ fiber_phases: ["45", "46"],
id: 1,
label: "3200 to 3299 1 1/2 ST N",
max_number: "3299",
min_number: "3200",
parsed_hash: "4028c7befc61ba4d07189f6ba99de35f",
street: "1 1/2 ST N"
}
]
到目前为止,这是我的JavaScript代码:
return this.blocks
.filter((block) => block.fiber_phases === fiberPhase)
.map(({id, label, max_number, min_number, street, parsed_hash, fiber_phases}) => ({id: id, label: label, max_number: max_number, min_number: min_number, street: street, parsed_hash: parsed_hash, fiber_phases: fiber_phases}))
很明显,我实际上并没有进入嵌套数组,但是我无法访问它。
如果要过滤主数组,使其仅包含在其fiber_phases
数组中任何位置具有fiberPhase
对象,则可以在谓词中使用带有includes
filter
:
return this.blocks.filter(block => block.fiber_phases.includes(fiberPhase));
Array.prototype.includes
是相对较新的,但是对于 Array.prototype.includes
是微不足道的(请参见上面的链接)。 或者,如果您不想这样做, indexOf
也可以工作:
return this.blocks.filter(block => block.fiber_phases.indexOf(fiberPhase) !== -1);
请注意,这将返回一个与原始对象共享对象的新数组。 如果您想复制它们,请添加
.map(entry => Object.assign({}, entry))
或使用ES2018规范中的某些Stage 4语法 :
.map(entry => ({...entry}))
无论哪种方式,它都是一个浅表副本(将共享fiber_phases
数组)。
根据需要进行调整。
您可以使用includes
和Object.assign
来实现:
return this.blocks
.filter(block => block.fiber_phases.include(fiberPhase))
.map(block => Object.assign({}, block));
或使用更新的ECMAScript 2018 传播对象文字的语法 :
return this.blocks
.filter(block => block.fiber_phases.include(fiberPhase))
.map(block => ({...block}));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.