4

ユーザーが特定のグループのメンバーであるかどうかを確認するために、項目の配列 (Tridion ユーザー グループ) をループする単純な Javascript があります。

以下に示す問題を簡単に回避するコードを作成できます ( を参照)。ただし、 =が配列内のとしてカウントされる&& extensionGroup !== 'true'理由を理解したいと思います。何かアイデアはありますか?isArraytrue

以下のスクリーンショットは、値extensionGroupsがこのように設定されたことを示しています

var extensionGroups = ["NotEvenARealGroup", "Author", "ExampleGroupAfterOneUserIsActuallyIn"]; 

isArrayしかし、値を4番目の値として返しますか?

画像を少し鮮明に表示するように更新されました

Firebug - オブジェクト

Firebug - コード

4

2 に答える 2

7

for in配列を反復するために使用しています。それをしないでください。使用for(またはforEach):

for(var i = 0; i < extensionGroups.length; i++) {
    var extensionGroup = extensionGroups[i];
    // ...
}

これが失敗する理由for inは、JavaScript でオブジェクトのプロパティを反復処理するために使用されるためです。このように配列を反復処理するということは、このプロパティやlength.

を使用できる場合はArray#forEach、おそらくここが最も適切です。

extensionGroups.forEach(function(extensionGroup) {
    // ...
});
于 2012-08-24T13:55:32.033 に答える
1

For..in、技術的に言えば、値を反復処理しません。プロパティ名を反復処理します。配列では、値はフードの下のプロパティです。したがって、それらを繰り返し処理すると、そのfor..inようなファンキーなことが起こります。

これは私の次のポイントを強調しています:使用しないでくださいfor..in。配列には使用しないでください。実際には、何にも使用しないでください。わかりました - ちょっと行き過ぎかもしれません。これはどうですか: を使用する必要があると感じた場合は、使用するfor..in前にそれが正当かどうかをよく考えてください。

于 2012-08-24T14:02:21.243 に答える