0

我正在我的代码中处理一个数组。我的数组包含多个 boolean 。我想检查我的数组中是否存在单个 false ,那么它返回 false ,否则返回 true 。我做了以下

var results = self.resultCollection();

    for (var i = 0; i < results.length ; i++) {

        if (!results[i]) {
            self.isModelValid = false;
            break;
        } else {
            self.isModelValid = true;
        }
    }

现在我从某人那里听说 jquery 调用中有一些东西,grap或者可能是grasp,我没有得到证实。他告诉我那grap/grasp会在一行中给你那个东西。任何人都知道这一点。

提前致谢 。

4

4 回答 4

2

只需使用indexOf

var results = self.resultCollection();
self.isModelValid = (results.indexOf(false) === -1);

或者,如果你真的需要额外的 jQuery:

self.isModelValid = ($.inArray(false, results) === -1);

这仅在值实际为 时才有效false,而不是错误的(0、空字符串等)。

于 2013-06-09T06:54:47.403 回答
1
var results = self.resultCollection();
self.isModelValid = $.grep(results, function(n){return n}).length == results.length;

如果返回的过滤后数组的长度与$.grep原始数组不同,则意味着至少有一项是false。当它们不一样时,self.isModelValid也会是false,创造你想要的效果。


解释

$.grep(results, function(n){return n})

$.grep删除所有false值并使用过滤器返回一个新数组return n(仅返回真正的项目)。

$.grep(results, function(n){return n}).length == results.length

然后将新数组的长度与原始数组的长度进行比较。如果它们不同,则意味着至少有一项被false删除。如果它们的长度相同,这将返回truefalse如果它们不同。

self.isModelValid = ...

然后将布尔值分配给self.isModelValid


$.grep有效,但在您的情况下它可能不是最佳实践。jQuery 将尝试评估整个数组并返回一个新数组,从而增加性能成本。如果您的数组仅包含布尔值,请使用Blender的代码。

另一方面,如果您的数组包含多种类型并且您已经在使用 jQuery,那么这可能是最好的方法。

于 2013-06-09T06:54:51.360 回答
0

every在这里可以提供帮助,但它是纯 JavaScript,而不是 jQuery。

self.isModelValid = results.every(function(x){return x;});
于 2013-06-09T06:53:56.523 回答
0
try this
var results = self.resultCollection();
self.isModelValid = (results.indexOf(false) === -1);
于 2013-06-09T07:21:07.783 回答