1

尝试使用 JavaScript 在 Python 中复制隐式迭代器,尽管我是男性,但我的代码不会返回“Dylan”。

Python:

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)

>>> [code] 返回 --> ["Alex", "John"]

为什么是这样?我的循环遍历所有值,并且我的 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

此外,您不需要显式比较 with 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 回答