Javascript 如何使用jQuery在一次传递中迭代嵌套的JSON?

Javascript 如何使用jQuery在一次传递中迭代嵌套的JSON?,javascript,jquery,json,Javascript,Jquery,Json,我有一个很大的JSON文件,下面有一个文件片段。请忽略这些值,因为它们仅用作此问题的占位符 "restaurants":[ "name": "Burger King", "location": "Seattle, WA", "latitude": 0.000, "longitude": 0.0000, "server": "BKSEATAC1", "s

我有一个很大的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;
(请注意,上面的代码只是一个片段)

为了从“tasks”开始遍历“internal”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;
(另一个片段)

我遇到的问题是,如果我组合代码,变量在第一次迭代中分配正确,但在第二次迭代中分配不正确。循环遍历“餐厅”,然后执行脚本中的其余代码,然后才遍历“任务”。我需要在第一次通过时设置所有变量。如有任何提示或建议,将不胜感激


提前谢谢

如果希望外部作用域位于内部作用域内,则需要将引用存储在变量中。我通常使用
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;

我经常看到在使用“我”的地方使用“那”@benauthor-是的,我也看到了
:)我喜欢使用
me
,因为我觉得它传达了同样的信息,并保存了2个字符。Travis J已经回答了你的问题,但我想指出的是,使用jQuery循环数组/对象的性能通常比使用普通JavaScript要慢——而使用普通JS,您不会遇到这些嵌套闭包。。。我不是说“你不应该这样做”,而是指出了另一种选择。你能举例说明吗?这对我自己和其他人都非常有帮助。非常感谢。这里有一个jsperf测试表明我基本上是错的:)注意:“其他”是IE11关于DesktopPerformance的,但是,我必须相信,随着时间的推移,重用变量(就像while循环代码那样)进行垃圾收集必须比jQuery创建的闭包更好。我想这取决于你做这个动作的频率。。。