所以我能够获得两个单独的JSON请求并分别吐出数据。我无法弄清楚的是如何将来自一个JSON数组的数据组合到另一个JSON数组中。下面是调用两个JSON数组的JS,其目的是能够匹配两个数组中的日期,并在日历上的每一天吐出目标数据(转换,完成,值)。所有数据都应添加到citationHTML变量中。
invokeAsync
答案 0 :(得分:1)
循环第一个数组时,需要存储可在第二个循环中使用的查找值。
创建一个查找对象,然后在第一个循环中:
var key = weather[i].date.replace(/-/g,'')
lookup[key] = i;
然后在第二个循环中使用该对象来查找匹配项。这里重写了您的代码:
$.when(
$.getJSON(dataUrl),
$.getJSON(dataUrl2)
).done (function (data, data2) {
var data = data[0].data;
console.log(data, data2);
var citationHTML = '';
var channelHTML = '';
var lookup = {};
var weather = data.weather;
for (var i = 0; i < weather.length; ++i) {
var key = weather[i].date.replace(/-/g,'');
lookup[key] = i;
citationHTML += '<li id="day'+[i]+'" class="day"><div class="date">' + weather[i].date + '</div><div class="svg-icon"><img src="' + weather[i].hourly[0].weatherIconUrl[0].value + '" /></div><div class="data-wrap col2"><p class="data hi-temp"><span>' + weather[i].maxtempF + '</span><sup class="deg ng-scope" data-ng-if="hasValue()">°</sup></p><p class="data lo-temp"><span>' + weather[i].mintempF + '</span><sup class="deg ng-scope" data-ng-if="hasValue()">°</sup></p></div><p class="data desc">' + weather[i].hourly[0].weatherDesc[0].value + '</p></li>';
}
jQuery('#citation_report').append(citationHTML);
jQuery.each(data2[0], function (i, item) {
var day = $("#day" + lookup[item.date]);
day.append('<tr><td class="tg-yw4l">' + item.date + '</td><td class="tg-yw4l">' + (+item.goalConversionRateAll).toFixed(2) + '%</td><td class="tg-yw4l">' + item.goalCompletionsAll + '</td><td class="tg-yw4l">$' + item.goalvalueall + '</td></tr>');
})
});
这是一个固定的小提琴:https://jsfiddle.net/s41kr5hj/54/