javascript根据条件从对象的嵌套数组返回属性值

总是抱怨

我有一个对象数组,其中每个对象都可以在其中包含对象数组。

var mylist = [
    {
        "email" : null, 
        "school" : "schoolA",
        "courses": [
            {
                "name" : 'ABC', 
                "type" : "chemistry"
            }, 
            {
                "name" : 'XYZ',
                "type": "math"
            }
        ]
    }, 
    {
        "email" : null,
        "school": "schoolB"
    }
];

如果课程类型之一是化学,我想返回课程名称。课程类型是唯一的,即使它们是重复的,我们也会返回第一个。

var result = mylist.some(function (el) {
            el.courses && el.courses.some(function(u) {
              if (u.type === 'chemistry') {
                 return u.name;
              };    
            })
        });

console.log('outcome:', result);  

我的代码在此阶段无法正常工作。

TJ人群

some回调应该返回一个truthy或falsy值,它告诉some是否继续下去(true=停止),并some返回一个布尔值,而不是回调返回值。

在这种情况下,可能最简单的就是直接分配给result

var result;
mylist.some(function(el) {
    return (el.courses || []).some(function(course) {
        if (course.type === "chemistry") {
            result = course.name;
            return true;
        }
        return false;
    });
});

现场示例:

var mylist = [
    {
        "email" : null, 
        "school" : "schoolA",
        "courses": [
            {
                "name" : 'ABC', 
                "type" : "chemistry"
            }, 
            {
                "name" : 'XYZ',
                "type": "math"
            }
        ]
    }, 
    {
        "email" : null,
        "school": "schoolB"
    }
];

var result;
mylist.some(function(el) {
    return (el.courses || []).some(function(course) {
        if (course.type === "chemistry") {
            result = course.name;
            return true;
        }
        return false;
    });
});
console.log(result);


我坚持使用ES5语法,因为您在问题中未使用任何ES2015 +,但是在ES2015 +中,最简单的方法可能是使用嵌套for-of循环:

let result;
outer: for (const el of mylist) {
    for (const course of el.courses || []) {
        if (course.type === "chemistry") {
            result = course.name;
            break outer;
        }
    }
}

现场示例:

const mylist = [
    {
        "email" : null, 
        "school" : "schoolA",
        "courses": [
            {
                "name" : 'ABC', 
                "type" : "chemistry"
            }, 
            {
                "name" : 'XYZ',
                "type": "math"
            }
        ]
    }, 
    {
        "email" : null,
        "school": "schoolB"
    }
];

let result;
outer: for (const el of mylist) {
    for (const course of el.courses || []) {
        if (course.type === "chemistry") {
            result = course.name;
            break outer;
        }
    }
}
console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据嵌套数组对象内的条件获取对象值

如何基于嵌套数组中的值返回对象?(Javascript)

如何根据某些条件合并2个对象的嵌套数组属性?

JavaScript/Underscore 根据嵌套数组内的对象属性删除数组

如何根据给定的索引更新嵌套数组中的值并在javascript中返回原始数组?

根据多级对象值使用条件过滤嵌套数组并更新它们-MongoDB Aggregate + Update

根据嵌套数组中的条件选择对象

根据MongoDB中的属性更新嵌套数组对象

根据Typescript中对象嵌套数组的值进行过滤

循环遍历对象的嵌套数组并用动态值替换空属性 - Javascript

Javascript或lodash:使用嵌套数组的值过滤对象数组

根据嵌套数组对象过滤对象

根据对象的嵌套数组进行过滤

根据嵌套数组的值派生 HTML

如何在 iOS Swift 中的嵌套数组(对多关系)中根据条件过滤对象数组

JavaScript根据属性值过滤对象数组

我想根据嵌套数组中的值返回一个多维数组

如何根据条件向数组中的嵌套对象添加属性

嵌套数组未返回预期值

从嵌套数组返回值

如何根据嵌套数组中的值过滤带有对象的数组并对其进行计数

如何更新对象嵌套数组的值

javascript循环嵌套数组并根据另一个数组提取属性

访问JavaScript中的嵌套数组/属性

来自javascript嵌套数组的json对象

删除嵌套数组的对象(JavaScript)

根据Javascript内部数组中的第二个值对嵌套数组进行排序

根据嵌套数组重新排列对象数组

无法根据嵌套数组过滤对象数组