javascript - 如何使用javascript从一组对象中查找其中一项是否已完成属性值为false并做出反应?
问题描述
我想从使用javascript的对象数组中查找是否至少有一个具有已完成属性且值为false的项目并做出反应。
我有一个像这样的对象数组,
const items = [
{
id: "32",
jobs: [
{
jobs_id: "32",
completed: true,
},
{
jobs_id: "34",
completed: false,
},
],
},
{
id: "31",
jobs: [
{
jobs_id: "30",
completed: true,
},
{
jobs_id: "33",
completed: true,
},
],
},
{
id: "30",
jobs: [
{
jobs_id: "31",
completed: true,
}
],
}
]
selected_items = { 32: 1, 31: 1, }
现在我想检查这些项目是否至少有一个对象,id 为 32 和 31 的 job completed false 。
基本上我必须使用 selected_items 过滤对象,然后检查作业对象的已完成属性值是否为 false。
在上面的例子中 selected_items 有 32 和 31 个 id。所以我必须从 id 为 32 和 31 的对象的 items 数组中过滤项目,并查看他们的任何一个作业对象是否已完成:false。
在上面的示例中,我们看到 id 为“32”的项目有 job_id 为“34”的作业已完成:false。
因此,如果 ID 为 32 或 31 的至少一项具有已完成的作业,我希望输出为真:假。否则为假。
我如何使用 javascript 进行检查。
我是编程和学习 javascript 的新手。有人可以帮我这个谢谢。
编辑: 我试过什么?
我知道可以使用 filter 和 array.includes() 方法进行过滤。
所以如果我有 selected_items = [32,31] 那么我可以执行以下操作来获取 id 为 32 和 31 的项目
const res = items.filter((item) => selected_items.includes(item.id);
但在我的情况下 selected_items 是对象。这只是过滤给定ID的项目。我仍然想检查基于 id 过滤的项目是否至少已完成:false。
解决方案
尝试这个:
var selected_items = { 32: 1, 31: 1, }
var arrOb =Object.keys(selected_items );
var res = items.filter((item) =>arrOb.includes(item.id));
var flag = false ;
for(let i = 0 ;i<res.length;i++){
if(res[i].jobs.some(ele=>ele.completed===true)){
flag = true ;
break ;
}
}
if(flag){console.log("it contains completed true")}
else{console.log(false)}
推荐阅读
- android - 亚马逊的 Alexa Voice Service SDK 和 Alexa Mobile Accessory Kit 有什么区别
- java - 卡尺为所有分配指标给出 0
- c# - 如何应用分页符
- java - 正则表达式操作不适用于最后一个斜杠
- python - 为什么 Django 更新对象第一次没有触发?
- javascript - VISX 避免在 Y 轴上浮动
- nginx - NGINX 根据 $arg 限制 IP 地址
- r - 如何在 r 中使用 dplyr 将具有条件的多行折叠成一行?
- kotlin - Kotlin Data 类不尊重值传递顺序
- gradle - 请帮我在 Gradle 项目中找到一个任务?