1

Python で Implicit Iterators を複製しようとすると、JavaScript を使用して、男性であるにもかかわらず、私のコードは "Dylan" を返しません。

パイソン:

names = [person.name for person in roster if person.male]

JavaScript アルゴリズム テスト:

roster = {
    person: [
        {
            name: "Katie",
            male: false
        },
        {
            name: "Dylan",
            male: true
        },
        {
            name: "Alex",
            male: true
        },
        {
            name: "John",
            male: true
        }
    ]
}

var names = []
var number = -1

for(var loop = 0; loop < roster.person.length; loop++) {
    if(roster.person[loop].male == true) {
        names[number++] = roster.person[loop].name
    }
}

console.info(names)

>>> [コード] 戻り値 --> ["アレックス", "ジョン"]

どうしてこれなの?私のループはすべての値を通過し、私の if then ステートメントは有効です。

4

2 に答える 2

2

-1これは、配列の位置に要素を挿入しようとしているためです。インクリメント演算子とデクリメント演算子を参照してください。

++number代わりにnumber++次のいずれかを使用します。

for(var loop = 0; loop < roster.person.length; loop++) {
    if(roster.person[loop].male == true) {
        names[++number] = roster.person[loop].name
    }
}

numberまたは、変数を0の代わりに に初期化する-1か、変数を使用して現在のインデックス値を保持する代わりに.push、配列に新しい要素を追加するだけを使用します。

また、明示的に と比較する必要はありませんtrue。式が次のように評価されれば十分ですtrue

for (var loop = 0; loop < roster.person.length; loop++) {
    if (roster.person[loop].male) {
        names.push(roster.person[loop].name);
    }
}
于 2012-08-28T00:27:49.783 に答える
2

Dylan をインデックス -1 に割り当てています。number代わりに 0 から開始する必要があります。また、なぜそれを手動で行うのですか?使用するだけArray.pushです:

var names = []

for(var loop = 0; loop < roster.person.length; loop++) {
    if(roster.person[loop].male == true) {
        names.push(roster.person[loop].name);
    }
}
于 2012-08-28T00:29:32.250 に答える