为什么不是't此对象解析正确

Why isn't this object parsed correctly?

本文关键字:对象 为什么不      更新时间:2023-09-26

试图在Python中复制隐式迭代程序,使用JavaScript,我的代码不会返回"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语句是有效的。

这是因为您正试图在数组的-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);
    }
}

您正在将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);
    }
}