如何迭代函数内的数组对象
问题描述:
我有vs.selectedTags
这是一个包含3个对象的数组。如何迭代函数内的数组对象
在我的for循环中运行3次,我需要进行3次API调用以获取每个对象的代码数据,我也可以。
当我尝试将这些代码分配给数组中的每个vs.selectedTags[i].tickers
对象时,我的问题就出现了。
它不能遍历ApiFactory
调用中的i
。 i
变成3,我必须通过使用[i-1]
来阻止它错误出局。但i
仍然停留在2
,因此它总是将最后一个代码数据保存到全部我的vs.selectedTags
阵列中的项目。
var vs = $scope;
for (var i = 0; i < vs.selectedTags.length; i++) {
console.log(i);
vs.selectedTags[i].tickers = '';
console.log(vs.selectedTags[i].tickers);
ApiFactory.getTagData(vs.chosenTicker, vs.selectedTags[i].term_id).then(function(data) {
// console.log(data.data.ticker_tag);
console.log(data.data.ticker_tag.tickers);
console.log(i-1);
// console.log(vs.selectedTags[0]);
// How would you properly iterate [0 - 1 - 2] here?
vs.selectedTags[i-1].tickers = data.data.ticker_tag.tickers;
console.log(vs.selectedTags[i-1]);
});
}
答
你需要一个闭合/新范围,为ApiFactory.getTagData
功能是异步
for (var i = 0; i < vs.selectedTags.length; i++) {
(function(j) {
vs.selectedTags[j].tickers = '';
ApiFactory.getTagData(vs.chosenTicker, vs.selectedTags[j].term_id).then(function(data) {
vs.selectedTags[j].tickers = data.data.ticker_tag.tickers;
});
})(i);
}
答
如果你把你的东西在for循环中的一个单独的功能,这将解决您的闭合问题。所以:
var bob = function(i){
console.log(i);
vs.selectedTags[i].tickers = '';
console.log(vs.selectedTags[i].tickers);
ApiFactory.getTagData(vs.chosenTicker, vs.selectedTags[i].term_id).then(function(data) {
// console.log(data.data.ticker_tag);
console.log(data.data.ticker_tag.tickers);
console.log(i);
// console.log(vs.selectedTags[0]);
// How would you properly iterate [0 - 1 - 2] here?
vs.selectedTags[i].tickers = data.data.ticker_tag.tickers;
console.log(vs.selectedTags[i]);
});
}
for (var i = 0; i < vs.selectedTags.length; i++) {
bob(i);
}
+0
感谢这也可以:) :)叹息,是啊,这可能是我最终会结束在...我喜欢@ adeneo的整洁解决方案寿 –
谢谢你的工作! :D cool关闭功能 –
它只需要一个函数,而IIFE是一个函数,它创建一个新的范围。有人喜欢它,有人认为最好是在一个单独的函数中编写代码,我认为这取决于它,如果它只是简单的代码在一个循环中,只是将它包装在一个IIFE中使我更容易阅读而不是将代码移出。 – adeneo