Javascript 如果值存在于所有数组中,则返回true

Javascript 如果值存在于所有数组中,则返回true,javascript,node.js,Javascript,Node.js,如果所有产品在statusLog数组中都包含Done,我希望返回true。如果任何产品在statusLog中不包含Done,则应返回false。某些产品可能没有statusLog属性,这意味着它应该返回false 代码似乎工作得很好,但我觉得一定有更好的方法来重构它。如果在第一个产品中没有找到“Done”,那么它应该跳过循环,因为它不需要继续循环。如何做到这一点 data={"id":123,"products":[{"id":1,"name":"Item 1","statusLog":[{"n

如果所有产品在
statusLog
数组中都包含
Done
,我希望返回true。如果任何产品在
statusLog
中不包含
Done
,则应返回false。某些产品可能没有
statusLog
属性,这意味着它应该返回false

代码似乎工作得很好,但我觉得一定有更好的方法来重构它。如果在第一个产品中没有找到“Done”,那么它应该跳过循环,因为它不需要继续循环。如何做到这一点

data={"id":123,"products":[{"id":1,"name":"Item 1","statusLog":[{"name":"New"},{"name":"Done"}]},{"id":2,"name":"Item 2","statusLog":[{"name":"New"},{"name":"Done"}]},{"id":3,"name":"Item 3","statusLog":[{"name":"Pending"},{"name":"Dones"}]},]}

var hasDone = 0;

data.products.forEach((product) => {
  if (product.statusLog) {
     if (product.statusLog.some((status) => {
      return status.name == "Done"
    })) {
         hasDone++
    }
  }
});

if (hasDone != data.products.length) {
    console.log("All products has Done Status")
} 
演示:

您可以使用

你可以用


您可以使用
过滤器
并检查其长度

当这样做时,你也会得到“未完成”的回报

堆栈片段

数据={
“id”:123,
“产品”:[{
“id”:1,
“名称”:“第1项”,
“状态日志”:[{“名称”:“新建”},{“名称”:“完成”}]
},
{
“id”:2,
“名称”:“第2项”,
“状态日志”:[{“名称”:“新建”},{“名称”:“完成”}]
},
{
“id”:3,
“名称”:“第3项”,
“statusLog”:[{“name”:“Pending”},{“name”:“Dones”}]
},
]
}
var not_done=data.products.filter(p=>{
如果(!p.statusLog | |!p.statusLog.some(s=>s.name==“Done”))返回p;
});
如果(未完成。长度>0){
console.log('这些/这还没有“完成”,还没有完成)

}
您可以使用
过滤器
并检查其长度

当这样做时,你也会得到“未完成”的回报

堆栈片段

数据={
“id”:123,
“产品”:[{
“id”:1,
“名称”:“第1项”,
“状态日志”:[{“名称”:“新建”},{“名称”:“完成”}]
},
{
“id”:2,
“名称”:“第2项”,
“状态日志”:[{“名称”:“新建”},{“名称”:“完成”}]
},
{
“id”:3,
“名称”:“第3项”,
“statusLog”:[{“name”:“Pending”},{“name”:“Dones”}]
},
]
}
var not_done=data.products.filter(p=>{
如果(!p.statusLog | |!p.statusLog.some(s=>s.name==“Done”))返回p;
});
如果(未完成。长度>0){
console.log('这些/这还没有“完成”,还没有完成)

}
您知道如何在内部循环中使用它,为什么不在外部循环中也使用它?@RemcoGerlich发布外部循环的答案
返回data.products.every(product=>product.statusLog.some(状态
@I'll-beep-Back:Paulpro已经到了那里你知道如何在内部循环中使用它,为什么不在外部循环中也使用它?@RemcoGerlich发布外部循环的答案
返回data.products.every(product=>product.statusLog.some(状态
@I'll-beep-Back:Paulpro已经得到了,应该是
product.statusLog和&product.statusLog.some(状态=>status.name==“完成”)
但是,根据OP的要求。@FelixKling正确,
product.statusLog
可能不存在应该是
product.statusLog和product.statusLog.some(状态=>status==“完成”)
但是,根据OP的要求。@FelixKling正确,
产品状态日志可能不存在
const allHaveDone = data.products.every( 
  product => (product.statusLog || []).some( status => status.name === "Done" )
);

if ( allHaveDone ) {
    console.log("All products has Done Status")
}