首页 > 解决方案 > 如何使用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。

标签: javascriptreactjs

解决方案


尝试这个:

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)}

推荐阅读