【发布时间】: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只返回一个布尔值,但不会转换调用它的集合。我认为您正在寻找filter和some的组合: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