我有一个大型JSON文件,下面是该文件的片段。请忽略这些值,因为它们仅用作此问题的占位符。
"restaurants":[
"name": "Burger King",
"location": "Seattle, WA",
"latitude": 0.000,
"longitude": 0.0000,
"server": "BKSEATAC1",
"serverAddress": "127.0.0.1",
"taskNames": ["BurgerOne","BurgerTwo","BurgerThree"],
"currentTasks": ["BurgerOne"],
"tasks": [ {"name":"BurgerOne","owner":"Tom","startTime":"11:00","endTime":"11:05","duration":"5"},
使用jQuery,我能够遍历“餐馆”并以下列方式设置变量值:
$.getJSON('json/DATA.json', function(data) {
$.each(data.restaurants, function(key, val) {
var restaurantName = this.name;
var restaurantLocation = this.location;
(请注意,上面的代码只是一个代码段)
要从“任务”开始迭代“内部”JSON,我使用以下代码
$.getJSON('json/DATA.json', function(data) {
$.each(data.restaurants, function(key, val) {
$.each(val.tasks, function(i, j){
var taskName = this.name;
var taskOwner = this.owner;
(另一个片段)
我遇到的问题是,如果我合并代码,变量会在第一次迭代中正确分配,而不是第二次迭代。循环遍历“餐馆”,然后执行脚本中的其余代码,然后只迭代“任务”。我需要在第一遍中设置的所有变量。任何提示或建议将不胜感激。
提前致谢!
答案 0 :(得分:4)
如果您希望外部范围位于内部范围内,则需要将引用存储在变量中。我通常使用me
作为名称,但它只是一个名称
$.getJSON('json/DATA.json', function(data) {
$.each(data.restaurants, function(key, val) {
var me = this;//save `this` reference
$.each(val.tasks, function(i, j){
var restaurantName = me.name;//use `this` from outer scope
var restaurantLocation = me.location;//use `this` from outer scope
var taskName = this.name;
var taskOwner = this.owner;