我不明白为什么这不起作用(屋顶的javascript对象)

时间:2017-12-19 02:38:37

标签: javascript object

我想用对象制作JSON字符串。

但是我遇到了一些奇怪的问题。

对象更改以前的值。

我不知道原因..

我的代码是..

    var sStr = "L1^P1^Viscosity:vp1,L1^P2^Viscosity:vp2,L1^P3^Viscosity:vp3,L1^P4^Viscosity:vp4,L1^P5^Viscosity:vp5"

    var objChild1 = {};
    var objChild2 = {};
    var objRtn = {};

    var arrStr = sStr.split(',');
    for (var i = 0; i < arrStr.length; i++) {
        var arrSpe = arrStr[i].split('^');
        objChild2["" + arrSpe[2].split(':')[0] + ""] = arrSpe[2].split(':')[1];
        objChild1["" + arrSpe[1] + ""] = objChild2;
        objRtn["" + arrSpe[0] + ""] = objChild1;
    }

    var sOp = JSON.stringify(objRtn, null, 2);

我认为这个逻辑的结果是

{
  "L1": {
    "P1": {
      "Viscosity": "vp1"
    },
    "P2": {
      "Viscosity": "vp2"
    },
    "P3": {
      "Viscosity": "vp3"
    }

    ...    

  }
}

这..但结果是

{
  "L1": {
    "P1": {
      "Viscosity": "vp5"
    },
    "P2": {
      "Viscosity": "vp5"
    },
    "P3": {
      "Viscosity": "vp5"
    }

    ...

  }
}

我似乎总是在问愚蠢的问题。

但我无人问。

为什么会这样?

让我知道这个问题的关键是什么。

1 个答案:

答案 0 :(得分:2)

您每次循环使用相同的objChild1objChild2个对象。您需要每次都创建新对象,但仅限于属性名称尚未创建的对象。

&#13;
&#13;
var sStr = "L1^P1^Viscosity:vp1,L1^P2^Viscosity:vp2,L1^P3^Viscosity:vp3,L1^P4^Viscosity:vp4,L1^P5^Viscosity:vp5";
var arrStr = sStr.split(',');
var objRtn = {};
for (var i = 0; i < arrStr.length; i++) {
    var arrSpe = arrStr[i].split('^');
    var lnum = arrSpe[0];
    var pnum = arrSpe[1];
    var prop = arrSpe[2].split(':');
    var propname = prop[0];
    var propval = prop[1];
    if (!objRtn[lnum]) {
        objRtn[lnum] = {};
    }
    if (!objRtn[lnum][pnum]) {
        objRtn[lnum][pnum] = {};
    }
    objRtn[lnum][pnum][propname] = propval;
}
console.log(JSON.stringify(objRtn, null, 2));
&#13;
&#13;
&#13;