3

typeオブジェクトの配列内のオブジェクトにが含まれているかどうかを確認するための最良の方法を教えてもらえます11か?

以下は私が持っているものですが、配列内のすべてのオブジェクトに対してアラートが表示されます。配列全体をチェックして、最後に1回だけアラートを表示させることはできますか?

grepのようなメソッドを見たことがありますが、試していて、機能させることができません。私はjQueryを使用しています。

var x;
for (x = 0; x < objects.length; x++) {

    if (objects[x].type == 11) {
        alert("exists");
    } else {
        alert("doesnt exist");
    }
}
4

5 に答える 5

4

最良の方法はArray.someを使用することです:

var exists = objects.some(function(el) { return el.type === 11 });

リンクには、それをサポートしていないブラウザー用の shim もあります。

それ以外の場合は、反復できます。

var exists = false;
for (var i = 0, el; !exists && (el = objects[i++]);)
    exists = el.type === 11;

変数を設定したら、次のexistsことができます。

if (exists) {
    // do something
}

どちらの場合も、ループの外側。

于 2013-02-15T00:36:56.193 に答える
3

あなたのコードは実際にそれを行うべきです。ループが無駄に続くのが気になる場合は、呼び出して中止することができますbreak;

if(objects[x].type == 11){
    alert("exists");
    break;
 }
于 2013-02-15T00:16:32.840 に答える
1

それを関数にします:

function hasObjWithType11(arr) {
    var x;
    for (x = 0; x < arr.length; x++) {
        if(arr[x].type == 11){
            return true;
        }
    }
    return false;
}

alert(hasObjWithType11([{type:1}, {type:11}]); // alerts true
于 2013-02-15T00:16:30.097 に答える
1

これでできます

var exists = false;
for (var x = 0; x < objects.length; x++) {
     if(objects[x].type == 11){
       exists = true;
       break;
     }
}
if(exists){
    alert("exists");
}
于 2013-02-15T00:18:16.460 に答える
1

別の関数にラップすることで、検索コードをより再利用しやすくすることができます。そうすれば、読みやすくするために条件を外部化できます。

function array_contains(a, fn)
{
    for (i = 0, len = a.length; i < len; ++i) {
        if (fn(a[i])) {
            return true;
        }
    }
    return false;
}

if (array_contains(objects, function(item) { return item.type == 11; })) {
    alert('found');
}

次を使用することもできますArray.some()

if (objects.some(function(item) {
  return item.type == 11;
})) {
    alert('exists');
}

IE < 9 の場合は、MDN のドキュメントでモック バージョンを参照してください。

于 2013-02-15T00:20:36.797 に答える