我无法添加新名称和值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
与数组值(日期和时间)匹配,我希望使用上面所述的特定名称添加它。但我似乎无法使其发挥作用。
这里是fiddle。
答案 0 :(得分:0)
如果我可以提供一些一般性反馈:将代码简化为再现问题的最小示例可能是一种很好的做法。这不仅会大大增加你自己修复它的机会,还会增加你在这里获得帮助的几率。
考虑到这一点,请考虑您在此尝试的基本结构:
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
遍历someNames
中的所有内容,然后立即将{em>>发送到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的出现,我们可以获得更多选择,特别是承诺。