尝试使用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)
&GT;&GT;&GT; [code]返回 - &gt; [“Alex”,“John”]
这是为什么?我的循环遍历所有值,我的if语句有效。
答案 0 :(得分:2)
那是因为你试图在数组的-1
位置插入一个元素。见Increment and decrement operators。
使用++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);
}
}
答案 1 :(得分: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);
}
}