我有一个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);
而另一个呢?我还能做些什么来纠正这个问题?
答案 0 :(得分:2)
您使用AX
和TX
作为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]。