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はそのことを 1 行で教えてくれると言いました。それは誰でも知っている。

前もって感謝します 。

4

4 に答える 4

2

使用するだけindexOfです:

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

または、追加の jQuery が本当に必要な場合は、次のようにします。

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

これは、値がfalsefalsey ( 0、空の文字列など) ではなく、実際に である場合にのみ機能します。

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

によって返されたフィルター処理された配列の長さが$.grep元の配列と異なる場合、少なくとも 1 つの項目が であることを意味しますfalse。それらが同じでない場合self.isModelValidでもfalse、必要な効果を生み出します。


説明

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

$.grepすべての値を削除falseし、フィルターを使用して新しい配列を返しますreturn n(真の項目のみを返します)。

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

次に、新しい配列の長さが元の配列の長さと比較されます。それらが異なる場合、少なくとも 1 つのアイテムが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 に答える