嵌套的对象过滤数组 returns 在 JS 中未定义

Nested array of objects filtering returns undefined in JS

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

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() 之后它不起作用。出了什么问题,如何解决?

首先, forEach 没有 return 任何东西。所以你应该改用.filter

for each product check if the tags array of objects has at least one tag of shows.

其次,条件应该是===而不是!==,此外,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

const allProducts = this.products.filter(product => product.tags.some(item => item.tagName !== "shows")).length == allProducts.length;

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