0

我有一个 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"];

然后我尝试遍历数据并拉出charge属性,如下所示:

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

但是,当我这样做时,我会从数据中得到一个未定义的结果。当我得到状态缩写时,它就在那里,当我在此调用之前注销数据时,所有数据都在那里。我可以通过执行以下操作来引用数据中的每条记录

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

有人愿意解释为什么console.log(data[states[i]].charge);,但另一个人愿意吗?另外我能做些什么来纠正这个问题?

4

4 回答 4

2

您正在使用AXandTX作为键,data但它们不是字符串,它们是变量。添加引号使它们成为字符串。

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

并且为了避免代码中可能出现的错误,请在尝试访问该属性之前检查是否data[states[i]]不是。undefinedcharge

var stateData = data[states[i]];

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

console.log(stateData.charge);
于 2013-04-18T13:26:02.533 回答
0

如果i = 0那么你应该得到未定义,因为states[0] === "AX""AX"data. 如果i = 1你应该得到165.

于 2013-04-18T13:26:43.640 回答
0

这可能是一个错字,但看起来您在 var states 中的状态列表与数据对象中的键不同,特别是“AX”不是数据对象示例中的键

于 2013-04-18T13:32:06.647 回答
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]。

于 2013-04-18T13:36:03.577 回答