Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON到JS数组,不存在的对象复制以前的对象值_Javascript_Arrays_Json_Google Sheets - Fatal编程技术网

Javascript JSON到JS数组,不存在的对象复制以前的对象值

Javascript JSON到JS数组,不存在的对象复制以前的对象值,javascript,arrays,json,google-sheets,Javascript,Arrays,Json,Google Sheets,这是JSON数据的一部分,我正试图制作一个数组,并将其放入Google电子表格中 这是m部分 "m":{ "414" : {"a":123}, "47279":{"a":1234 }, "463306":{"a":12345}} 这是z部分 "z":{"3270": "414" : {"d":{"0":{"p":500}}}, "47279":{"d":{"0":{"p":700}}}} 这是我正在使用的JS代码 var Uid = Object.getOwnPropertyNames(do

这是JSON数据的一部分,我正试图制作一个数组,并将其放入Google电子表格中

这是m部分

"m":{
"414" : {"a":123},
"47279":{"a":1234 },
"463306":{"a":12345}}
这是z部分

"z":{"3270":
"414" : {"d":{"0":{"p":500}}},
"47279":{"d":{"0":{"p":700}}}}
这是我正在使用的JS代码

var Uid = Object.getOwnPropertyNames(doc1.m);
for (var lp2 = 0; lp2 < Uid.length; lp2++) {
    var Uid1 = Uid[lp2];
    var TotalD = Math.round(doc1.m[Uid[lp2]].a);




    testUF.push([Uid1, TotalD]);
}
//Total Obelisk Defense
for (var lp1 = 0; lp1 < testUF.length; lp1++) {
    var lp35id = Object.getOwnPropertyNames(doc1.z["3270"]).length;
    var ob35id = Object.getOwnPropertyNames(doc1.z["3270"]);
    var ob35 = "3270";

    for (var lp3 = 0; lp3 < lp35id; lp3++) {
        if (ob35id[lp3] === testUF[lp1][0]) {
            if (typeof doc1.z[ob35][ob35id[lp3]] !== 'undefined' && doc1.z[ob35][ob35id[lp3]] !== null && doc1.z[ob35][ob35id[lp3]] !== "") {
                var ob35D = (doc1.z[ob35][ob35id[lp3]].d["0"].p);
            } else {
                var ob35D = "0";
            }
        }

        var ob35TD = ob35D;
    }

    var obTD = ob35TD;
    testUF[lp1][2] = Math.round(obTD);

}
我得到的结果

+--------+--------+------+
| Uid1   | TotalD | obTD |
+--------+--------+------+
| 414    | 123    | 500  |
+--------+--------+------+
| 42729  | 1234   | 700  |
+--------+--------+------+
| 463306 | 12345  | 700  |  <<-- This is the Problem, The obTD Value should be 0
+--------+--------+------+
所以问题是在我的结果中,当Uid在m对象中不存在时,你可以看到obTD值与前一个值重复,
但是如果z中不存在Uid,我希望它为0:{3270对象。

您在变量作用域中遇到了意想不到的问题。您打算在最内层for循环的作用域中声明ob35D,而在其他地方未定义ob35D,但JavaScript只具有函数级作用域。由于您没有在发布的内容中声明任何函数,因此所有变量实际上都是全局变量这是代码的一部分

因此,当您运行lp1和lp3循环时,ob35id[lp3]==testUF[lp1][0]对于UID 414和42729是正确的,并将ob35D设置为500,然后设置为700。在最后一个lp1循环中,lp3循环从未找到463306的匹配项,因此ob35D保持为700,并通过ob35TD和OBD传播,而ob35D和OBD实际上是不必要的,因为ob35D在testUF列表中的任何地方都可以访问

最简单的修复方法是在每个lp1循环的开始处设置ob35D=0。当没有Uid匹配时,这将为您提供所需的默认值


我还建议继续,因为更好地理解它可以大大简化代码。

ThanQ非常好,它解决了我的问题,还让我知道了我出现错误的原因和原因。ThanQ非常: