如何迭代函数内的数组对象

问题描述:

我有vs.selectedTags这是一个包含3个对象的数组。如何迭代函数内的数组对象

在我的for循环中运行3次,我需要进行3次API调用以获取每个对象的代码数据,我也可以。

当我尝试将这些代码分配给数组中的每个vs.selectedTags[i].tickers对象时,我的问题就出现了。

它不能遍历ApiFactory调用中的ii变成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); 
} 
+0

谢谢你的工作! :D cool关闭功能 –

+1

它只需要一个函数,而IIFE是一个函数,它创建一个新的范围。有人喜欢它,有人认为最好是在一个单独的函数中编写代码,我认为这取决于它,如果它只是简单的代码在一个循环中,只是将它包装在一个IIFE中使我更容易阅读而不是将代码移出。 – adeneo

如果你把你的东西在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的整洁解决方案寿 –