访问数组内的对象值

时间:2016-02-26 20:16:46

标签: javascript arrays json object

我希望有人可以帮助解决一个简单的问题 - 但我已经准备好再次抨击我的头了。

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

我正在努力学习如何访问修改后的twichResult对象的值(在函数运行之后),这样我就能用它做“东西”。例如在屏幕上显示'status'属性的值等...我举一些例子来说明我在大注释部分中尝试过的内容。

我真的很感激有些智慧因为我耗尽了我的资源。提前谢谢。

<script type="text/javascript">

	$(document).ready(function()  {

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

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

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

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

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

</script>

1 个答案:

答案 0 :(得分:0)

$ .getJSON正在发出ajax请求。您必须在请求处理程序中处理此请求。当getTwichers返回时,twichResults尚未设置。

有一些方法可以延迟程序执行,直到twichResults完成,但你不应该考虑使用它们,因为它们会延迟程序执行。 ajax的想法是异步执行事物,而不会干扰执行流程的其余部分。如果您要执行的代码取决于json,那么您应该将它添加到$ .getJSON中的句柄。只需编写一个新函数(例如continue_execution(twichResult))并在twitchResult [“results”]之后立即调用它.push(channel);.请勿在getTwitchers(...)之后做任何事情。

顺便说一句:在使用函数之前定义函数是一个好习惯,因为它遵循人眼读取代码的流程,并且有编程语言,这依赖于这种声明函数的风格。

如果您不清楚这一点,请添加评论。