以下函数检查某些对象是否具有属性thumbnail
。我希望它返回true
如果对象有缩略图,false
如果对象没有:
function hasThumbnail (key, object) {
Object.keys(object).forEach(key => {
const value = object[key]
if (value.constructor === Array) {
value.forEach(obj => {
if (obj.thumbnail) {
return true
} else {
return false
}
})
}
})
但是,现在该功能不会返回任何内容。如何让函数返回true
或false
?
答案 0 :(得分:2)
如果找到,您可以在里面使用Array#some
从迭代中获取true
或false
。
function hasThumbnail (key, object) {
return Object.keys(object).some(key => {
const value = object[key]
if (value.constructor === Array) {
return value.some(obj => {
return obj.thumbnail;
});
}
});
}
答案 1 :(得分:1)
你有一个forEach
,但是循环中的return
只是结束循环所以你需要这样做:
function hasThumbnail (key, object)
{
var ret = false;
Object.keys(object).forEach(key => {
const value = object[key]
if (value.constructor === Array) {
value.forEach(obj => {
if (obj.thumbnail) {
ret = true;
return;
} else {
ret = false;
return;
}
})
}
});
return ret;
}
这段代码未经测试,而且我更像是一个jQuery人,但返回不在循环中的概念应该与vanilla JS相同。
答案 2 :(得分:1)
这是一种不那么冗长的方式:
function hasThumbnail(object) {
return Object.values(object).some(prop =>
Array.isArray(prop) && prop.some(x => x.thumbnail));
}
Object.values
可以很容易地填充。