2017-06-15 92 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

我添加了一个“异步“关键字到我正在加载的脚本,并解决了这个问题。这是因为我在等待整个文档加载之前加载脚本,这导致了一些问题。