gpt4 book ai didi

javascript - 保存一个json对象但不供引用

转载 作者:行者123 更新时间:2023-11-28 00:56:59 29 4
gpt4 key购买 nike

这是我的问题,以更简化的方式报告

这是 json(如果需要,请查看 json here)

{"resource":[{"id":"1408694994","obj":[{"id":"1","action":[{"name":"ON","id":"301"},{"name":"OFF","id":"302"}]},{"id":"2","action":[{"name":"ON","id":"303"},{"name":"OFF","id":"304"}]}]},{"id":"1408694995","obj":[{"id":"3","action":[{"name":"ON","id":"305"},{"name":"OFF","id":"306"}]},{"id":"4","action":[{"name":"ON","id":"307"},{"name":"OFF","id":"308"}]}]}]}

给定一个 id(在本例中我们说 id = 3),我必须使用该 ID 保存该项目。我将具有该 ID 的对象保存在新对象 (newobj) 中,但仅使用 ON 操作更改 OBJ 中的数组 ACTION

示例

<script> 

var tt = '{"resource":[{"id":"1408694994","obj":[{"id":"1","action":[{"name":"ON","id":"301"},{"name":"OFF","id":"302"}]},{"id":"2","action":[{"name":"ON","id":"303"},{"name":"OFF","id":"304"}]}]},{"id":"1408694995","obj":[{"id":"3","action":[{"name":"ON","id":"305"},{"name":"OFF","id":"306"}]},{"id":"4","action":[{"name":"ON","id":"307"},{"name":"OFF","id":"308"}]}]}]}';

var myjson = JSON.parse(tt);

var search = 3;


console.log(myjson.resource[1].obj[0]);

for(var i = 0 ; i < myjson.resource.length; i++){

for(j = 0 ; j < myjson.resource[i].obj.length; j++){

if(parseInt(myjson.resource[i].obj[j].id) == search){

var newobj = myjson.resource[i].obj[j];

var obj_action = newobj.action;
for(var k = 0 ; k < obj_action.length ; k++){

if(obj_action[k].name == "ON"){
newobj.action = obj_action[k];
}
}
}
}
}

console.log(myjson.resource[1].obj[0]);

</script>

我可以轻松地将我想要的对象保存在变量 newobj 中。但为什么初始的json会改变???

更新

好吧,我明白这显然是我如何将 obj 保存在 newobj 变量中的问题。我不保存对象,只保存 json 中对象的引用。如何将其保存在变量 newobj 中? (不是通过引用?)

最佳答案

解耦对象引用的一种方法是将序列化和反序列化为 JSON。在这种情况下,你可以这样做:

var newobj = JSON.parse(JSON.stringify(myjson.resource[i].obj[j]));

请注意,这并不是每次都有效。例如,具有函数或原型(prototype)的复杂对象将不会被保存。

它的性能也略有下降。

关于javascript - 保存一个json对象但不供引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102800/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com