为什么这个json交换代码不起作用?

时间:2014-11-13 11:31:59

标签: javascript json

我有这个乐趣:

swapjson = function (j1,j2) 
{ var jj = JSON.parse(JSON.stringify(j1));
  j1 = JSON.parse(JSON.stringify(j2));
  j2 = jj;  
}

我也有:

var myjson1 = {'x':1000, 'y':1000};
var myjson2 = {'x':2000, 'y':-2000};

swapjson (myjson1,myjson2);
console.log myjson1.x

1000 ?????

我发现在swapjson函数内部进行了交换,但没有在调用之后。

发生什么事了?我不明白我做得不好...... 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您无法像这样替换整个对象,因为对象本身不会被引用传递 但是,您可以更改传递的对象的属性,并且在传入对象的副本时它会粘住。

因此,不是解析为字符串并返回到对象,而是可以迭代两个对象键,并逐个替换

swapjson = function (j1, j2) {
    var temp = {};

    for (key in j1) {
        temp[key] = j1[key];
        delete(j1[key]);
    }
    for (key in j2) {
        j1[key] = j2[key];
        delete(j2[key]);
    }

    for (key in temp) {
        j2[key] = temp[key];
    }

}

FIDDLE

答案 1 :(得分:0)

myjson1(这是对象的引用,与JSON无关)复制到j1,以及myjson2 into j2

然后,您将覆盖j1的值和j2的值。

您永远不会更改myjson1myjson2的值。