js之json序列化【解决对象引用类型方法】 - yuzhouxiaogegit/blog GitHub Wiki
json序列化方案一:这里采用的是递归进行赋值的方法,目前我还没有发现有什么场景是不满足。
/* 我在使用json序列化的过程中,发现他的缺点所有对此进行了改进 缺点:代码书写相对复杂 优点:满足100% 使用场景 */
function deepCopy(obj) {
var result = Array.isArray(obj) ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepCopy(obj[key]); //递归复制
} else {
result[key] = obj[key];
}
}
} return result
}
// 调用示例
let tempJsonData = { "user": { "name": "zhanshan", "goods": { "clothes": "T恤", "color": "red", "Hair": "blue", "tempFun": function () { return 999999 } }, "id": 5, "sex": "男", "age": 61 } };
let tempFunData = deepCopy(tempJsonData);
// 修改对象中的值
tempFunData.user.name = "wangwu"; tempFunData.user.goods.tempFun = "改变函数中的值";
console.log("\n\n")
console.log(tempJsonData, "------------原始对象中的值-------------")
console.log(tempFunData, "------------修改后对象中的值-------------")
json序列化方案二:这种方法相信很多小伙伴都用过,有一个弊端就是function 是不能进行序列化的,不过代码已经能满足大多数场景下使用了
/*
这种情况已经满足大多数情况下场景使用了
缺点:不支持序列化函数
优点:代码优雅且书写简单
*/
let tempJSON = {"user":{"name":"zhanshan","goods":{"clothes":"T恤","color":"red","Hair":"blue"},"id":5,"sex":"男","age":61}};
let tempJSON1 = JSON.parse(JSON.stringify(tempJSON));
tempJSON1.user.name = "lishi" // 修改对象中的值
console.log(tempJSON,"------------原始对象中的值-------------")
console.log(tempJSON1,"------------修改后对象中的值-------------")