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

标签 javascript arrays multidimensional-array ecmascript-6

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

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

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

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

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

我的代码在这个阶段不工作。

最佳答案

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

在这种情况下,可能最简单的方法就是直接分配给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);

关于javascript根据条件从嵌套的对象数组返回属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50211009/

相关文章:

arrays - 使用 VBA 中的默认值数组使用大纲填充 Excel WBS

javascript - 如何使用 jQuery 删除变量上的 '_' 前缀?

javascript - 如何将 "name:"添加到现有的 javascript 对象/数组

java - 在 jlist 中显示集合

c++ - 智能感知 : an array may not have elements of this type

c++ - 初始化 C/C++ 多维数组时忽略大小

javascript - Backbone.js:如何在特定页面触发特定功能?

javascript - 我有一个带有 gulp.watch 的 for,但它无法正常工作

javascript - 无法获取数组以正确显示嵌套 for 循环的结果

javascript - .map() 不是函数