2016-11-26 110 views
0

arr [0] .price的结果在函数外是'undefined'。为什么变量arr在函数外被定义并且数据被推到它之外时不可用?从JavaScript数组中的对象键获取值

var arr = []; 

function get_data() { 

    $.ajax({ 
     url: 'http://bitcoinprice.co.uk/site-options/', 
     dataType: 'json', 
     success: function(data) { 
     var price = data['gbp_price']; 
     var abs_change = data['gbp_abs_change']; 
     var p_change = data['gbp_change']; 
     var market_cap = data['gbp_market_cap']; 
     var today_max = data['gbp_today_max']; 
     var today_min = data['gbp_today_min']; 

     var obj = { 
      'price'  : 50, 
      'abs_change' : abs_change, 
      'p_change' : p_change, 
      'market_cap' : market_cap, 
      'max'  : today_max, 
      'min'  : today_min 
     }; 

     arr.push(obj); 
     console.log(arr[0].price); // 50 
     } 

    }); 

} 
get_data(); 

console.log(arr[0].price) // Uncaught TypeError: Cannot read property 'price' of undefined(…) 

我似乎无法找到答案。我试图从函数get_data()之外的关键“价格”中获得价值。

我确定我在这里错过了一些简单的东西。

+4

试'的常用3 [0] .price' – georg

+1

的Javascript没有关联数组,仅基于索引的阵列。 – connexo

+0

返回“无法读取未定义(...)的属性'价格'” – Nick

回答

4

您需要使用arr[0].price,因为price属性不是定义在数组上,而是定义在对象上,即数组中的第一个条目。

您的代码可以改写这样的证明发生了什么:

var o = {'price':price}; 
o.price; // 50 
arr.push(o); 
arr[0] === o; // true 

你会做这样的实际分配属性数组:

arr.price = price; 
+0

忽略,你的代码的作品,我的。我简化了我的问题,并消除了导致问题的一些范围问题。谢谢您的回答。 – Nick

+0

@尼克,很高兴帮助。祝你好运 –

+0

,而不是创建一个新的问题,我已经更新它来显示范围界定问题。 – Nick

0

只是另一种选择

var price = 50, 
     arr = []; 
arr.price = price; 

console.log(arr.price+'<br>'+arr['price']); // both return 50 
+0

我已更新我的问题以显示范围问题。 – Nick

0

var arr无非是对象数组。你只需要在数组中循环来获得价值。

var price = 50; 
var arr = []; 

var obj = { 
    'price' : price 
} 

arr.push(obj); 

for(var i of arr) 
    { 
    console.log(i['price']); //50 
    } 
+0

我已更新我的问题以显示范围问题。 – Nick

+0

你确定你的问题有一个范围界定问题吗?我也从输出块中获得输出50! – Lalitha

相关问题