javascript - 循环遍历一个对象来检查返回 true 的函数

标签 javascript function

我有一个像这样的对象:

var BrowserDetect = {
    uniqueProps: [],
    browserUID: '',
    browserFonts: '',
    isIPhonePad: function() {
        return navigator.userAgent.match(/iPhone|iPod/i);
    },
    isDesktop: function() {
        return !navigator.userAgent.match(/iPhone|iPad|android/i);
    },
    isAndroid: function() {
        return navigator.userAgent.match(/android/i);
    },
    isFirefox: function() {
        return navigator.userAgent.match(/firefox/i);
    },
    isIOS7: function() {
        return navigator.userAgent.match(/.*CPU.*OS 7_\d/i);
    },
    isChromeCrios: function() {
        return navigator.userAgent.match(/chrome|crios/i);
    },
    isIPad: function() {
        return navigator.userAgent.match(/iPad/i);
    }
}

(仅供引用:对象内部还有更多函数)

所以我想检查“BrowserDetect”并检查其中哪些函数返回“true”并获取函数的名称。

实现这一目标的简单方法是什么?我尝试使用jquery $.each,但没有成功。

最佳答案

使用Object.keys()Array#filter来迭代对象并返回所有真实的函数名称:

Object.keys(BrowserDetect).filter(function(key) {
  var f = BrowserDetect[key];

  return typeof f === 'function' && f();
});

var BrowserDetect = {
    uniqueProps: [],
    browserUID: '',
    browserFonts: '',
    isIPhonePad: function() {
        return navigator.userAgent.match(/iPhone|iPod/i);
    },
    isDesktop: function() {
        return !navigator.userAgent.match(/iPhone|iPad|android/i);
    },
    isAndroid: function() {
        return navigator.userAgent.match(/android/i);
    },
    isFirefox: function() {
        return navigator.userAgent.match(/firefox/i);
    },
    isIOS7: function() {
        return navigator.userAgent.match(/.*CPU.*OS 7_\d/i);
    },
    isChromeCrios: function() {
        return navigator.userAgent.match(/chrome|crios/i);
    },
    isIPad: function() {
        return navigator.userAgent.match(/iPad/i);
    }
};

var result = Object.keys(BrowserDetect).filter(function(key) {
  var f = BrowserDetect[key];
  
  return typeof f === 'function' && f();
});

console.log(result);

关于javascript - 循环遍历一个对象来检查返回 true 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920661/

相关文章:

javascript - AS3 - 使用 ExernalInterface.call 重置 JS 计时器

javascript - jquery click 不锁定 bootstrap col-md div

mysql 提供相当于 Oracle NVL 的函数

function - Scala 中的反函数

python - 如何在 Pandas 中进行分组,在所有组上使用带有参数的函数并返回参数

python - 翻转硬币游戏功能

javascript - 使用 Angular 将图像作为表单的一部分上传

javascript - 计算另一个对象中匹配的对象

javascript - 如何不用空白状态覆盖调度

javascript - 如果文本等于特定值则启动函数