Javascript JSON到JS数组,不存在的对象复制以前的对象值
这是JSON数据的一部分,我正试图制作一个数组,并将其放入Google电子表格中 这是m部分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
"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非常: