[英]Can't add new name and value to JSON object dynamically with condition using JavaScript
我无法添加新名称和值ff。 给定条件:
$.each(names, function (i, name) {
$.get('https://www.example.com/path/' + name, function (data) {
var arrNow = CSVToArray(data, ',');
allArr.push(arrNow);
counter++;
if (counter === names.length) {
for (var j = 0; j < allArr.length; j++) {
for (var k = 1; k < allArr[j].length; k++) {
//console.log(allArr[j][k][0] + ': ' + allArr[j][k][1]);
//var f = moment(allArr[j][k][0]).format('lll');
var f = allArr[j][k][0];
json.push({
"datetime": f
});
if (j == 0) {
if (json[k].datetime === allArr[0][k][0]) {
var newAtt = "water_actual";
var newValue = allArr[0][k][1];
json[k][newAtt] = newValue;
}
}
if (j == 1) {
if (json[k].datetime === allArr[1][k][0]) {
var newAtt = "rainfall_actual";
var newValue = allArr[1][k][1];
json[k][newAtt] = newValue;
}
}if (j == 2) {
if (json[k].datetime == allArr[2][k][0]) {
var newAtt = "forecast_water";
var newValue = allArr[2][k][1];
json[k][newAtt] = newValue;
}
}
}
}
};
});
});
我能够使用if语句添加新名称water_actual
及其值。 如果json对象中的datetime
与数组值(日期和时间)匹配,我想用上面指定的特定名称添加它。 但是我似乎无法使其正常工作。
这是小提琴 。
如果我可以提供一些一般性反馈:将代码简化为可重现您问题的最小示例可能是一个好习惯。 这不仅会大大增加您自己进行修复的机会,而且还会增加您在此处获得帮助的几率。
考虑到这一点,请考虑您在此处尝试的基本结构:
var someNames = ["foo", "bar"];
var allTheData = [{
"aardvark": true
}];
$.each(someNames, function (i, name) {
$.get('http://example.com/api/' + name, function (data) {
data.aNewProperty = 'wombat';
allTheData.push(data);
});
});
console.log(allTheData);
在这里, $.each
遍历$.each
所有someNames
,然后立即进入console.log
语句。 就我们所知,每个单独的API调用( $.get
)可能需要几秒钟或几分钟。 到此时,我们已经尝试使用allTheData
的内容,该内容可能已修改,也可能未修改。
为了避免在旧版JavaScript中发生这种情况,我们可以利用$.get
已经提供的回调:
$.get('http://example.com/api/' + name, function (data) {
data.aNewProperty = 'wombat';
console.log(data);
});
在回调内部,我们可以肯定地知道API请求已经完成(尽管以上假设已成功完成 ,这完全是另一回事)。 这将在响应到达时输出每个API请求的结果,尽管不一定按照您期望的顺序!
JavaScript的异步特性在过去往往会导致大量回调。 随着ES6的出现,我们还有更多可用的选择,尤其是诺言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.