gpt4 book ai didi

Javascript 组合来自不同范围的多个数组

转载 作者:行者123 更新时间:2023-11-30 09:35:13 25 4
gpt4 key购买 nike

下面是一个函数,它应该使用 chaptersArry 获取每个章节的项目并将它们放入一个新数组*将原始章节数据和项目数据放在一起*调用itemsArr

function get_items(chaptersArry){
for ( var ii = 0, l = chaptersArry.length; ii < l; ii++ ) {
console.log(chaptersArry[ii].id+" *****"); // this returns the correct data


// now I am using each chapter ID from above to $.get the chapter items.....
var api_url = '/collections/' + chaptersArry[ii].id + '/contents.json';
$.get(api_url, function(items) {
// for each chapter loop through items and push them to itemsArr.
for ( var i = 0, l = items.collection_contents.length; i < l; i++ ) {
console.log(chaptersArry[ii].id); // returns incorrect data
itemsArr.push({
series_id : chaptersArry[ii].series_id,
series_name : chaptersArry[ii].series_name,
chapter_id : chaptersArry[ii].id,
chapter_name : chaptersArry[ii].name,
chapter_display_name : chaptersArry[ii].display_name,
chapter_data : items.collection_contents[i]
});
}
});

}
}

最佳答案

与 Kamyar Infinity 的回答一样,您需要使用闭包或使用 let 的 block 作用域来在 $.get() 回调中获取正确的数据,但是,这不是问题的关键。由于您需要异步返回数据,因此需要使用 promises。以下是您可以如何做到这一点:

Working Demo

function get_items(chaptersArry){
return new Promise(function (resolve, reject) {
var promises = [];
for (let ii = 0, l = chaptersArry.length; ii < l; ii++ ) {
console.log(chaptersArry[ii].id+" *****"); // this returns the correct data

// now I am using each chapter ID from above to $.get the chapter items.....
var api_url = '/collections/' + chaptersArry[ii].id + '/contents.json';
var promise = new Promise(function (_resolve, _reject) {
$.get(api_url, function(items) {
var itemsArr = [];
// for each chapter loop through items and push them to itemsArr.
for ( var i = 0, l = items.collection_contents.length; i < l; i++ ) {
itemsArr.push({
series_id : chaptersArry[ii].series_id,
series_name : chaptersArry[ii].series_name,
chapter_id : chaptersArry[ii].id,
chapter_name : chaptersArry[ii].name,
chapter_display_name : chaptersArry[ii].display_name,
chapter_data : items.collection_contents[i]
});
}
_resolve(itemsArr);
});
});
promises.push(promise);
}
Promise.all(promises).then(function (values) {
resolve(values);
});
});
}

get_items(chaptersArry).then(function (results) {
// flatten array of results from each $.get()
console.log([].concat(...results));
});

关于Javascript 组合来自不同范围的多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com