繁体   English   中英

JavaScript通过具有嵌套数组的对象数组进行过滤,并检查嵌套数组中的变量是否匹配

[英]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数组)。

根据需要进行调整。

您可以使用includesObject.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM