【问题标题】:Nested array of objects filtering returns undefined in JS嵌套的对象数组过滤在 JS 中返回未定义
【发布时间】:2021-05-02 05:48:55
【问题描述】:

我正在尝试为每个产品检查标签对象数组是否至少有一个节目标签。

const allProducts = this.products.forEach(product =>
        product.tags.some(item => item.tagName !== 'shows'),
      )

数据样本:

    Products: [
    {
    productId:...
    productName: ...
    tags:[
    {
    tagId:...
    tagName:...
    }
    {
    tagId:...
    tagName:...
    }
    ]
    },
    {
    productId:...
    productName: ...
    tags:[
    {
    tagId:...
    tagName:...
    }
    {
    tagId:...
    tagName:...
    }
    ]
    }

]

似乎在 some() 之后它不起作用。出了什么问题,如何解决?

【问题讨论】:

  • Array#forEach 是一个仅执行功能块内部的功能(即在product => 部分之后)。 Array#some 只返回一个布尔值,但不会转换调用它的集合。我认为您正在寻找filtersome 的组合:const allProducts = this.products.filter(product => product.tags.some(item => item.tagName !== 'shows'));
  • @nbokmans 如果所有产品都具有该嵌套值,我需要返回 true,过滤器将过滤,而我需要为所有项目传递它。
  • 在这种情况下,我认为您可能正在寻找 Array#every 而不是 Array#some - every 只会解析为 true 如果数组中的 all 项匹配你的谓词。

标签: javascript arrays ecmascript-6 javascript-objects ecmascript-5


【解决方案1】:

首先, forEach 不返回任何内容。所以你应该改用.filter

为每个产品检查标签对象数组是否至少有一个标签 节目。

其次,条件应该是===而不是!==,另外,need return the true if all products are passing the some() not filter

==> 解决方案:

const allValidProducts = this.products.filter(product => product.tags.some(item => item.tagName === 'shows'));
const result =  allValidProducts.length === this.products.length;  

如您所见,.some 工作正常。

const array = [1, 2, 3, 4, 5];
console.log(array.some(element => element % 2 === 0));
// expected output: true

【讨论】:

    【解决方案2】:
    const allProducts = this.products.filter(product => product.tags.some(item => item.tagName !== "shows")).length == allProducts.length;
    

    如果过滤后数组的长度保持不变,则所有产品都通过some

    【讨论】:

    • 这将返回一个布尔数组而不是过滤后的产品。此外,filter 还创建了一个新数组。
    • 如果所有项目都是布尔值而不是布尔值数组,我如何返回布尔值?
    • @expressjs123 如果所有产品都通过 some() 而不是过滤器,我需要返回 true
    猜你喜欢
    • 2021-12-26
    • 2017-03-08
    • 2021-02-16
    • 2021-01-23
    • 2021-08-02
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多