2015-06-14 188 views
2

我有一個對象數組。不知何故,其中一個屬性在我的每個循環內都會丟失。我嘗試了許多不同類型的循環,但沒有任何辦法可以解決這個問題。當通過對象數組迭代時,Javascript對象屬性'null'

someFunction(someArrayOfObjects) { 
    console.log(someArrayOfObjects); // logs objects as I expect them to be 

    $.each(someArrayOfObjects, function(index, someObject) { 
     console.log(someObject); // one of the properties of someObject is 'null' 
    }); 
} 

UPDATE:如何數組構造:

// constructor 
var people = []; 
var Person = function (name, age, photo) { 
    this.name = name; 
    this.age = age; 
    this.photo = null; 
}; 

然後使用AJAX來得到一些JSON,並通過各那些人創建對象

success: function(data) { 
     people.push(new Person(data['name'], data['age']) 
} 

然後我迭代併發出另一個AJAX請求來獲取他們的每張照片。回調看起來像這樣:

function(person, photo) { 
    person.photo = photo; 
}); 

我是新來的JavaScript和異步編程,所以圍繞回調包裝我的頭腦是艱難的。我想我已經知道了console.log(someArrayOfObjects)按我的預期工作。我只是無法弄清楚爲什麼照片屬性會在對象單獨記錄時恢復。 我也嘗試在CoffeeScript中重寫所有內容,因爲語法對我而言稍微簡單一些,但不幸的是問題仍然存在。

謝謝。

截圖控制檯: screenshot of console

+0

你能提供陣列的簡單的例子? – user3272018

+0

'var someArrayOfObjects = {name:「joe」,age:「32」,photo:「joe.jpg」}, {name:「alice」,年齡:「5」,照片:「alice.jpg」 }, {name:「john」,age:「22」,photo:「john.jpg」} ]'@ user3272018 – lizvdk

+0

給出的代碼似乎是正確的。 – vinayakj

回答

1

新的更新,並在最後

下面的最終答案是示例代碼,所有的Ajax調用完成後,這裏則只有buildQuiz()功能會被稱爲意味着所有的數據已準備好進一步使用。

$.when($.ajax("/page1.php"), $.ajax("/page2.php")) 
    .then(buildQuiz, myFailure); 

舊的更新

截至目前(可能會得到3次,但)只是嘗試下面的代碼,讓我知道日誌..

function getCastMembers(movieTitle) { 
    getNames(movieTitle, function(castMembers) { 
    getPhotos(castMembers, function(castMember, photo) { 
     castMember.photo = photo; 
     buildQuiz(castMembers); 
    }); 
    }); 
} 

舊的更新

所以它似乎必須有一些之間的第一和sceond日誌語句。

var people = []; 
var Person = function (name, age, photo) { 
    this.name = name; 
    this.age = age; 
    this.photo = null; 
}; 
var someArrayOfObjects = [ {name: "joe", age: "32", photo: "joe.jpg"}, 
{name: "alice", age: "5", photo: "alice.jpg"},{name: "john", age:"22", photo:"john.jpg"}]; 
for(i in someArrayOfObjects){ 
people.push(new Person(someArrayOfObjects[i]['name'], someArrayOfObjects[i]['age'])) 
} 

people.forEach(function(person,index){ 
    person.photo = someArrayOfObjects[index].photo; 
}) 
function somefunction(people){ 
    console.log(people); // logs objects as I expect them to be 
     people.forEach(function(person) { 
      console.log(person); 
     }) 
} 
somefunction(people); 

OUTPUT 

VM359:17 [Person, Person, Person] 
0: Personage: "32"name: "joe"photo: "joe.jpg" 
__proto__: Person1: Person2: Personlength: 3__proto__: Array[0] 

VM359:19 Person {name: "joe", age: "32", photo: "joe.jpg"} 
VM359:19 Person {name: "alice", age: "5", photo: "alice.jpg"} 
VM359:19 Person {name: "john", age: "22", photo: "john.jpg"} 

舊的更新

photo數據的成功回調調用該函數進行迭代。

success: function(data) { 
    for(){ 
     person.photo = data.photo; // maybe something like this 
            // you have within for loop 
            // or something 
    } 
    // so after all persons filled 
    // up with photo now call iterator 
    somefunction(someArrayOfObjects); 
} 

OLD ANSWER

下面的代碼工作正常。試試看。

var someArrayOfObjects = [ {name: "joe", age: "32", photo: "joe.jpg"}, {name: "alice", age: "5", photo: "alice.jpg"}, {name: "john", age: "22", photo: "john.jpg"} ]; 
 
     
 
    function somefunction(someArrayOfObjects){ 
 
     console.log(someArrayOfObjects); // logs objects as I expect them to be 
 
    
 
     someArrayOfObjects.forEach(function(someObj) { 
 
      console.log(someObj.name +" "+someObj.age +" "+ someObj.photo); 
 
     }) 
 
    } 
 
    somefunction(someArrayOfObjects); 
 

 
/* outout */ 
 
/* 
 
joe 32 joe.jpg 
 
alice 5 alice.jpg 
 
john 22 john.jpg 
 
*/

+0

評論不適用於擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/80941/discussion-on-answer-by-vinayakj-javascript-object-property-null-when-iteratin)。 –