Jquery如何将(||)或三元运算符添加到$ .grep方法..?

时间:2013-06-20 10:06:38

标签: jquery arrays

在我的表单中,只是我在从服务器加载后更改了已更改的值。因为我正在做这个功能:

$(checkBox).each(function(i,el){
            status.push($(el).prop("checked"));

            $(el).click(function(){
                var clickedIndex = checkBox.index($(this));
                var prevStatus = status[clickedIndex];

                if(prevStatus !== $(this).prop("checked")){
                    statusChanged.push($(this).val() + ( $(this).prop("checked") ? add.toLowerCase() : remove.toLowerCase()));
                }else{
                    var that = $(this);
                    statusChanged = $.grep(statusChanged, function(value) {
                        return value != that.val() + add.toLowerCase()
                    });

                    statusChanged = $.grep(statusChanged, function(value) {
                        return value != that.val() + remove.toLowerCase()
                    });
                }

                console.log(statusChanged);

            })

        })

在这个函数中,在else部分(statusChanged)我调用$ .grep函数2次为"add""remove" - 如果我写这样的函数(仅此部分)

var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
    return value != that.val() + add.toLowerCase() || that.val() + remove.toLowerCase() //not working
});

不工作..?这里有什么问题或者$,grep不接受or(||)三元运算符,或者任何一个给出其他简短的方法..请

提前谢谢。

3 个答案:

答案 0 :(得分:1)

  

“$,grep不接受or(||)三元运算符”

是的,它会。 $.grep()期望你的函数返回一个布尔值,但它并不关心你如何获得布尔值。

如果您的问题是如何检查value是否未添加或删除,那么您可以执行此操作:

var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
    return value != that.val() + add.toLowerCase()
           && value != that.val() + remove.toLowerCase();
});

也就是说,value未添加 value的测试不会被删除 - 但它可能是任何其他值。

每次调用回调时调用.val().toLowerCase()似乎有点令人讨厌,所以我可能会这样做:

var val = $(this).val(),
    valAdd = val + add.toLowerCase(),
    valRemove = val + remove.toLowerCase();
statusChanged = $.grep(statusChanged, function(value) {
    return value != valAdd && value != valRemove;
});

答案 1 :(得分:1)

实际上,运行此代码:

statusChanged = $.grep(statusChanged, function(value) {
    return value != that.val() + add.toLowerCase()
});

statusChanged = $.grep(statusChanged, function(value) {
    return value != that.val() + remove.toLowerCase()
});

执行or - 操作(||)。它是and。如果您在一个条件上筛选列表,然后在第二个条件下筛选相同的列表,它将在两个条件下进行筛选(and);不在其中一个上(or)。

您需要做的是在新代码中使用&&

var that = $(this);
statusChanged = $.grep(statusChanged, function(value) {
    return (value != that.val() + add.toLowerCase()) && (value != that.val() + remove.toLowerCase());
});

修改

此外,与上面提到的其他一些答案一样,您应该注意优先顺序。将个别案例包裹在括号中(就像我在上面添加的那样)。

答案 2 :(得分:0)

我认为这与运营商优先权有关; +的出发率高于!=。 逻辑也是错误的,你要检查值是既不那个。

尝试将行更改为:

return (value != that.val() + add.toLowerCase()) && (value != that.val() + remove.toLowerCase());

参考:JavaScript Operator Precendence