如何使以下函数返回true或false?

时间:2016-04-29 07:21:14

标签: javascript function

以下函数检查某些对象是否具有属性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
        }
      })
    }
  })

但是,现在该功能不会返回任何内容。如何让函数返回truefalse

3 个答案:

答案 0 :(得分:2)

如果找到,您可以在里面使用Array#some从迭代中获取truefalse

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可以很容易地填充。