为什么不是't此对象解析正确
Why isn't this object parsed correctly?
试图在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);
}
}
相关文章:
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 为什么不是't此对象解析正确
- 为什么不是't html<对象>元素响应鼠标事件
- 为什么不显示多个HTML对象对象
- JavaScript:为什么 array.push() 附加两个对象而不是一个对象
- 为什么不是't使用Protractor中的executeScript创建的对象
- I'我正在努力学习Angular——为什么不;t我的对象没有用ng repeat出现
- JS - 为什么我的输出是对象 { } 而不是:MyObj { }
- 为什么在重构jQuery代码时我得到[对象对象]而不是我预期的HTML
- 为什么不在对象外部使用属性定义语法是语法错误
- JS:为什么这个对象属性不起作用,只有当我把它作为变量放在其中一个方法中时,它才有效
- 为什么在 JavaScript 中引用对象的不存在属性不会返回引用错误
- 为什么这个对象方法不返回布尔值Javascript
- 为什么函数在全局对象中不可用
- 为什么我的 JavaScript 对象看不到以下方法
- 不明白为什么不应该在语句的开头使用对象文字
- 为什么不增加对象变量
- 为什么控制台打印数组中的对象而不打印对象
- 为什么不't〃;var derived1=新对象(基)“;将derived1.原型设置为基础
- UnCaught TypeError-Javascript中的嵌套对象?为什么不允许这样做?对象文字表示法有效