2012-08-28 94 views
1

試圖複製在Python中隱迭代器,使用JavaScript我的代碼,不返回「迪倫」儘管是一個男性。爲什麼不能正確解析這個對象?

的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) 

>>> [代碼]返回 - > [ 「亞歷克斯」, 「約翰」]

爲什麼這是?我的循環遍歷所有的值,我的if語句是有效的。

+0

你缺少一個分號兄弟(不是說是你的問題雖然) – Hubro

+0

分號不是在默認情況下,在JavaScript中每行的端所需。 – railgun

+1

信任隱式分號插入是一個致命的罪過。始終使用分號。 – Hubro

回答

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 
    } 
} 

或者用一個變量來保存當前索引值初始化變量number0而不是-1或替代的,只是使用.push,還增加了一個新的元素添加到數組中。

而且,你不需要明確地true比較,就足夠了表達式求true

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

謝謝!這有效:)但++數字和數字++之間有什麼區別? – railgun

+0

'number ++'會評估'number'的值,只有* then *會遞增; '++ number'將首先*增加變量的值,然後它會評估它的值。因此,在你的第一次迭代中,用'++ number'得到'0',用'number ++'得到'-1'。 –

+0

@EliotBall:這是周圍的兄弟 – Hubro

2

你分配迪倫指數-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); 
    } 
} 
+0

我只用API做JSON,我不知道有'Array.push'。在此基礎上:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push我會用names.push(roster.person [循環]。名稱,就像在你的榜樣謝謝,這讓事情變得更簡單。:) – railgun

相關問題