从JavaScript数组中的对象键获取值

时间:2016-11-26 13:30:53

标签: javascript jquery arrays object

arr [0]的结果.price在函数外部是'undefined'。为什么变量arr在函数外部定义并且数据被推送到它时不可用?

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()之外的关键'price'获取值。

我确信我在这里缺少一些简单的东西。

3 个答案:

答案 0 :(得分:4)

您需要使用price,因为var o = {'price':price}; o.price; // 50 arr.push(o); arr[0] === o; // true 属性不是在数组上定义的,而是在对象上定义的,这是数组中的第一个条目。

您可以像这样重写代码来演示正在发生的事情:

arr.price = price;

您必须这样做才能将属性实际分配给数组:

pasa.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //Starting a new Intent
        Intent nextScreen = new Intent(getApplicationContext(), semis.class);
        //Sending data to another Activity
        nextScreen.putExtra("semss", sems.toString());
        startActivity(nextScreen);
        finish();  // this is the last statement ever
    }
});

答案 1 :(得分:0)

只是另一种选择

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

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

答案 2 :(得分: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
    }