2017-09-27 35 views
1

我有一个数据:如何将更改保存在深层嵌套对象中?

reservations = { 
"2016":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 111"}}, 
"2017":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 222"}} 
} 

我需要改变一些notes_backend,然后发送更新reservations到API。

这里是我的代码:

var reservations_obj = JSON.parse(reservations), 
    raw_id = 'A36822'; 

for (var year in reservations_obj){ 
    if (raw_id in reservations_obj[year]){ 
     reservations_obj[year][raw_id]["notes_backend"] = "UPDATED NOTES"; 
     console.log('new_data:', reservations_obj[year][raw_id]); // new_data: {datetime: "6/22/17 at 11:00AM", visitors: "11 guests", notes_backend: "UPDATED NOTES"} 
     console.log(JSON.stringify(reservations_obj)); // no changes 
     break; 
    } 
} 

... send updated reservations_obj to API 

第一console.log显示reservations_obj[year][raw_id]改变,但第二console.log显示我最初reservations_obj没有任何更新。

上面的代码是基于Python的逻辑,但如何在JavaScript中实现它?

+1

请问您能解释究竟是什么问题,因为您的代码已经是javascript实现了。 –

+0

请注意代码中的注释。第一个'console.log'显示'reservations_obj [year] [raw_id]'被更改,但第二个'console.log'显示我没有任何更新的最初'reservations_obj'。 – TitanFighter

+4

如果我删除由于语言的“开始评论”使用错误符号而导致的语法错误,它看起来工作正常。有什么问题? (投票关闭由于错字引起的题外话题) – Quentin

回答

0

你只有很少的语法错误。首先JSON的必须是一个字符串:

var reservations = `{ 
"2016":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 111"}}, 
"2017":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 222"}} 
}` 

这里几乎相同的代码工作plunker。 (打开控制台)

1

你的代码工作得很好..但要记住预留变量已经包含PARSED json。

var reservations = { 
"2016":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 111"}}, 
"2017":{"A36822":{"datetime":"6/22/17 at 11:00AM","visitors":"11 guests", "notes_backend":"Some notes 222"}} 
} 

// var reservations_obj = JSON.parse(reservations),  // reservations is already PARSED! 
var reservations_obj = reservations, 
    raw_id = 'A36822'; 

for (var year in reservations_obj){ 
    if (raw_id in reservations_obj[year]){ 
     reservations_obj[year][raw_id]["notes_backend"] = "UPDATED NOTES!!!!!!!!!!!!!!!!!"; 
     console.log(JSON.stringify(reservations_obj)); 
     break; 
    } 
} 
相关问题