2017-06-15 79 views
0

做一個當前使用Knockout.JS作爲我的MVVM框架的項目。我正在嘗試一些基本操作,例如使用簡單的如markersArray['Tiong Bahru Station (EWL)']來訪問我的特定對象markersArray的值。我明白,由於存在空格,我必須使用方括號表示法。但是,當我console.log這個,並進一步在我的代碼中,它沒有價值。通過JavaScript中的鍵訪問對象屬性

代碼如下:

JS

在scripts.js中的文件:

var stationList = [ 
     {name: "Tiong Bahru Station (EWL)", marker: markersArray['Tiong Bahru 
Station (EWL)']} 
console.log(markersArray['Tiong Bahru Station (EWL)']); // Returns undefined 


在maps.js文件:

var markersArray = {}; 
for (var i = 0; i < markers.length; i ++) { 
    marker = new google.maps.Marker({ 
     position: markers[i].position, 
     map: map, 
     animation: google.maps.Animation.DROP 
    }); 
    var name = markers[i].name; 
    markersArray[name] = marker; 
} 
var markers = [ 
{name:"Tiong Bahru Station (EWL)", position: {lat:1.28498, lng:103.82283}} 
]; 

我去檢查我的markersArray的console.log,以確保它構建正確並且它正確填充。希望能幫助我們弄清楚爲什麼我沒有從使用密鑰訪問數值中獲得任何價值。

+0

這不是足夠的代碼給你任何答案。什麼是你迭代的marker數組來填充markersArraty對象,這是一個對象的可怕名字。您還必須確保maps.js在script.js之前運行該代碼 – Dellirium

+0

您似乎讓您的對象有點混亂。 'stationList'是一個你正在定義的數組,但是沒有定義'markersArray',所以定義'stationList'失敗。在你更新的第二段代碼中,沒有數組「標記」,因此也失敗了。我建議你做一個你希望工作的片段,然後社區可以提供建議。 – user3094755

+0

我已經添加了新代碼,是的,maps.js在scripts.js之前運行。我可以在scripts.js中使用console.log(markerArray),我可以看到整個對象。是的,我將重新命名該對象,正在玩耍,所以我錯過了我的命名約定。大聲笑 – bryancresswell

回答

1

這段代碼的作品,但我不知道你有什麼問題。

最簡單的解決辦法是把你的標記到廠商陣列,然後指向標記數組,

markers[i].marker = 'The Marker' markers[markers[i].name] = markers[i]

var markers = [ 
 
{name:"Tiong Bahru Station (EWL)", position: {lat:1.28498, lng:103.82283}} 
 
]; 
 

 
var markersArray = {}; 
 
for (var i = 0; i < markers.length; i ++) { 
 
    var name = markers[i].name; 
 
    markersArray[name] = 'The marker'; 
 
} 
 

 
console.log(JSON.stringify(markers,null,2)) 
 

 
console.log(JSON.stringify(markersArray,null,2))

+0

是的,如果它們都運行在同一個文件上,但是如果我在scripts.js上嘗試它,它不會再給出值。 – bryancresswell

+0

感謝隊友,我想出了問題。 – bryancresswell

0

我添加了一個「異步「關鍵字到我正在加載的腳本,並解決了這個問題。這是因爲我在等待整個文檔加載之前加載腳本,這導致了一些問題。