JavaScript / jQuery - 对象操作的.every()等效方法

4

如何测试类似于数组.every()方法的对象?试图检测在发送请求之前查询对象中的所有术语是否都为空。显然,我可以在for循环中编写一个小程序,但是我希望有一种更简洁的方法来实现这一点。

// array - works
var queryArr = [ "", "" ];
if(!queryArr.every(function(el, i, arr) { return el == "" } )) {
    alert("nothing to search");
}

// object - "undefined is not a function"
var queryObj = { term1: "", term2: "" };
if(!queryObj.every(function(el, i, arr) { return el == "" } )) {
    alert("nothing to search");
}

for循环是最好的。 - guramidev
没有内置的函数,但很容易制作一个。 - Karl-André Gagnon
2个回答

1
您可以通过以下方式实现自己的every方法:
Object.prototype.every=function(evalFunction){
    var self=this,
        property;

    if(typeof evalFunction!=='function')
        return evalFunction;

    for(property in self){
        if(self.hasOwnProperty(property) && !evalFunction(self[property], property, self)){
            return false;
        }
    }
    return true;
}

然后,您可以像在数组上一样使用对象上的新every方法
但是,如果您只想在代码中测试一次,则建议使用 for in循环 或robisrob的 map 解决方案。

1

这个很好用,但让我惊讶的是我必须做所有这些操作 if($.map(queryObj, function(el){ return el} ).join("") != ""){ - robisrob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接