在jquery中从数组中获取特定项

时间:2013-06-09 06:48:39

标签: javascript jquery

我在代码中处理数组。我的数组包含mutliple 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 个答案:

答案 0 :(得分:2)

只需使用indexOf

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

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

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

只有当值实际为false,而不是假(0,空字符串等)时才会有效。

答案 1 :(得分: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返回一个新数组(仅返回true项)。

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

然后将新阵列的长度与原始阵列的长度进行比较。如果它们不同,则表示至少有一个项目为false并已删除。如果它们的长度相同,则返回truefalse如果不同的话。{/ p>

self.isModelValid = ...

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


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

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

答案 2 :(得分:0)

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

self.isModelValid = results.every(function(x){return x;});

答案 3 :(得分:0)

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