两个json互操作的有关问题
两个json互操作的问题
问:为什么 t和ret 的值一样?明明在sum中已经赋值给新变量了;
要求:sum 返回新的t,并不改变t
求大牛给看看。谢谢!!!
------解决方案--------------------
数组和对象是引用类型的,你在方法里面修改了,会影响原来的,加一个true表示是深度拷贝。
function sum(src_ol, tag_ol) {
var sol = {'l': [], 'f': '', 'c': ''};
var tol = {'l': [], 'f': '', 'c': ''};
if (src_ol) {
$.extend(sol, src_ol);
}
if (tag_ol) {
$.extend(tol, tag_ol);
}
var r =tol.l;
for (var i = 0; i < sol.l.length; i++) {
var o = sol.l[i];
for (var n in r) {
if (r[n][tol.f] === o[sol.f]) {
r[n][tol.c] += o[sol.c];
}
}
}
return r;
}
function test() {
var s = [{'e': 'p', 'c': 5}, {'e': 'p', 'c': 4}, {'e': 'k', 'c': 10}];
var t = [{"k": "k", "r": 0, "b": 0}, {"k": "p", "r": 0, "b": 0}, {"k": "r", "r": 0, "b": 0}];
var ret = sum({'l': s, 'f': 'e', 'c': 'c'}, {'l': t, 'f': 'k', 'c': 'r'});
console.log(t);
console.log(ret);
}
问:为什么 t和ret 的值一样?明明在sum中已经赋值给新变量了;
要求:sum 返回新的t,并不改变t
求大牛给看看。谢谢!!!
------解决方案--------------------
数组和对象是引用类型的,你在方法里面修改了,会影响原来的,加一个true表示是深度拷贝。