我有一个对象数组,其中每个对象都可以有一个对象数组。
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);
我的代码在这个阶段没有工作。
答案 0 :(得分:3)
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);

答案 1 :(得分:2)
您可以使用classpath 'com.google.gms:google-services:3.3.0'
方法迭代数组中的每个对象,然后使用reduce()
方法查找某些课程是否与类型匹配。
find()