Javascript数组和对象键

时间:2013-04-18 13:23:10

标签: javascript

我有一个JSON响应我正从一个如下所示的自定义Web服务返回:

var data = { 
    AZ:{charge:123,count:324},
    TN:{charge:123,count:7545},
    TX:{charge:165,count:345}
}

我希望循环使用一系列状态缩写,我通过另一个json调用返回。我不需要遍历所有状态,只需要通过此json调用指定的特定状态。所以我最终得到了一系列状态缩写,如下所示:

var states = ["AZ","TX"];

然后我尝试循环数据并拉出电荷属性,如下所示:

console.log(data[states[i]].charge);

然而,当我这样做时,我从数据中找回了未定义的内容。当我拿出状态缩写时,它就在那里,当我在此调用之前注销数据时,所有数据都在那里。我可以通过执行以下操作来引用数据中的每条记录

console.log(data["TN"].charge);

任何人都在关心为什么console.log(data[states[i]].charge);而另一个呢?我还能做些什么来纠正这个问题?

4 个答案:

答案 0 :(得分:2)

您使用AXTX作为data的键,但它们不是字符串,而是变量。添加引号以使其成为字符串。

var states = ['AX','TX'];

为避免代码中出现错误,请在尝试访问data[states[i]]属性之前检查undefined是否不是charge

var stateData = data[states[i]];

if(!stateData) return; //or `continue` if inside a loop to skip

console.log(stateData.charge);

答案 1 :(得分:0)

如果i = 0,那么您应该定义states[0] === "AX"并且"AX"中没有data密钥。如果i = 1您应该获得165

答案 2 :(得分:0)

这可能是一个拼写错误,但看起来你的状态列表中的状态列表与数据对象中的键不一样,特别是“AX”不是数据对象示例中的键

答案 3 :(得分:0)

我刚试过这个:

<script lang='javascript'>  
var data = { 
    AZ:{charge:123,count:324},
    TN:{charge:123,count:7545},
    TX:{charge:165,count:345}
}

var states = ['AX','TX'];
console.log(data[states[1]].charge);
console.log(data["TN"].charge);

</script>

输出:

165
123

因此,如果它从api调用回来调用它可能会作为变量回来,所以你必须先引用它然后将它传递给控制台。类似的东西:

var charge = data[states[i]].charge
console.log(charge)

您还应该首先检查数据数组中是否存在states [i]。