访问数组内部的对象值

问题描述:

我希望有人能够帮助解决一个简单的问题,但我已经准备好再次将我的头靠在墙上。访问数组内部的对象值

我有一个函数可以对API进行JSON调用,然后将结果推送到数组中。该函数似乎工作得很好,因为我的console.log显示该数组已正确填充。

我在如何访问修改过的twichResult对象的值(函数运行后),以便我可以用它来做'stuff'。例如在屏幕上显示“状态”属性的值等等......我举了一些我在大型注释部分尝试过的例子。

我真的很感谢一些智力,因为我耗尽了我的资源。提前致谢。

<script type="text/javascript"> 
 

 
\t $(document).ready(function() { 
 

 
\t \t var twitchResult = {results:[]}; 
 
\t \t var channel = { logo:"", display_name:"", status:"", url:"" }; 
 
\t \t var finalUrl = "https://api.twitch.tv/kraken/streams/freecodecamp?callback=?" 
 
\t \t 
 
\t \t getTwitchers (finalUrl, "freecodecamp"); 
 
\t \t console.log(twitchResult); 
 

 
\t \t // How do I access the individual values in the object TwitchResult? 
 
\t \t // I get "undefined" in the console if I try to access the object's property values 
 
\t \t // I've tried every way I can think of to get 'into' the returned object : 
 
\t \t // console.log(twitchResult.results); 
 
\t \t // console.log(twitchResult["results"]) 
 
\t \t // console.log(twitchResult.results.status) 
 
\t \t // console.log(twitchResult[0]) 
 
\t \t // console.log(twitchResult[0][0]) 
 
\t \t // etc etc 
 
\t \t \t 
 
\t \t function getTwitchers (url, item) { 
 

 
\t \t \t $.getJSON(url, function(data) { 
 
\t \t \t 
 
\t \t \t var obj = data.stream; 
 
\t   \t \t 
 
\t  \t \t // Check if the object is not valid using (obj == null) which is shorthand for both null and undefined 
 
\t  \t \t if (obj == null) { 
 
\t  \t \t \t if (obj === undefined) { 
 
\t   \t \t \t channel.display_name = item; 
 
\t   \t \t \t channel.status = "closed"; 
 
\t   \t \t \t console.log ("this is undefined"); 
 
\t  \t \t \t } 
 
\t  \t \t \t else { 
 
\t   \t \t \t channel.display_name = item;   \t \t \t 
 
\t   \t \t \t channel.status = "offline"; 
 
\t   \t \t \t console.log("this is null"); 
 
\t  \t \t \t } 
 
\t  \t \t } 
 
\t  \t \t else { 
 
\t  \t \t \t channel.logo = obj.channel.logo; 
 
\t \t \t \t channel.display_name = obj.channel.display_name; 
 
\t  \t \t \t channel.status = obj.channel.status; 
 
\t  \t \t \t channel.url = obj.channel.url; 
 
\t  \t \t \t console.log("valid entry");  \t \t \t 
 
\t  \t \t } 
 

 
      twitchResult["results"].push(channel); 
 

 
//   twitchResult.results.push(channel); 
 
// \t  \t console.log(twitchResult); \t 
 
\t \t 
 
\t \t \t }); 
 
\t \t } 
 
\t }); 
 

 
</script>

$ .getJSON正在一个Ajax请求。您必须在请求处理程序中处理此请求。 getTwichers返回时,twichResults尚未设置。

有些方法可以延迟程序执行,直到twichResults完成,但是您不应该考虑使用它们,因为它们会延迟程序执行。 ajax的想法是异步执行,而不会干扰其余的执行流程。如果您要执行的代码取决于json,那么您应该将它添加到$ .getJSON中的句柄中。只需编写一个新函数(例如continue_execution(twichResult))并在twitchResult [“results”]。push(channel);之后立即调用它。在getTwitchers(...)之后不要做任何事情。顺便说一下:在使用它们之前定义函数是一种好习惯,因为它遵循人眼读取代码的流程,并且存在编程语言,这取决于这种声明函数的风格。

如果您对此不清楚,请添加评论。

+0

谢谢。因此,对getJSON请求所产生的数据的任何处理/操作都需要发生:$ .getJSON(url,function(data){}? 在已知的Universe中是否有任何方法暂停getTwitchers的返回,直到所有的JSON数据是在(并twichResults因此设置)? – Zander

+0

@赞德:我扩展了我的答案。 –

+1

感谢您的定义,然后调用函数的建议 - 我渴望学习良好的,清洁的习惯。此外,很高兴知道我不要在寻找程序执行延迟的方法,我很感谢你回答我的问题的时间! – Zander