Javascript 在角度(循环中的循环)中创建新对象数组时遇到问题

Javascript 在角度(循环中的循环)中创建新对象数组时遇到问题,javascript,ajax,angularjs,Javascript,Ajax,Angularjs,我想做的是比较两个阵列相似的乐队和艺人Sarray。我想记录两个数组中发生的每个匹配,这是我创建计数器的逻辑。我要寻找的最终结果是一个名为newMatchingArray的新对象数组这两个数组的所有匹配项,它将接受一个name属性和一个matches属性,该属性指示有多少匹配项 该函数现在可以正确地查找匹配项,但不会在每次匹配时增加计数器,而是在2处停止。我对JS和AJAX完全不熟悉,所以很抱歉我有一个明显的问题/缺乏技术细节。谢谢 $scope.getBandsLikeThisBand =

我想做的是比较两个阵列相似的乐队和艺人Sarray。我想记录两个数组中发生的每个匹配,这是我创建计数器的逻辑。我要寻找的最终结果是一个名为newMatchingArray的新对象数组这两个数组的所有匹配项,它将接受一个name属性和一个matches属性,该属性指示有多少匹配项

该函数现在可以正确地查找匹配项,但不会在每次匹配时增加计数器,而是在2处停止。我对JS和AJAX完全不熟悉,所以很抱歉我有一个明显的问题/缺乏技术细节。谢谢

  $scope.getBandsLikeThisBand = function(){
          $.ajax({
            async: false,
            type: 'Get',
            url: 'https://api.spotify.com/v1/artists/' + $scope.bandId + '/related-artists',
            success: function(data){
              console.log($scope.allTheArtists);
              $scope.similarBandsArray = data.artists;
              $scope.similarMathesArray = [];
              $scope.newMatchingArray = [];
                for(var i = 0; i < $scope.similarBandsArray.length; i ++){ //going through every related artist from the search
                  var counter = 0;
                  for (var x = 0; x < $scope.allTheArtists.length; x ++){ //going through every artist in the allTheArtistsArray
                    if($scope.similarBandsArray[i].name === $scope.allTheArtists[x].name){
                      counter ++;
                      if (counter > 0){
                        var toBeAddedToMutual = {
                          name: $scope.similarBandsArray[i],
                          count: counter
                        };
                      $scope.newMatchingArray.push(toBeAddedToMutual);
                      }
                    }
                    if($scope.soManyObjects && $scope.soManyObjects.amount > 0 ){
                        $scope.bigBoyArray.push($scope.soManyObjects.name + "and their count is" + ($scope.soManyObjects.amount + 1));
                      }
                  }
                }
                for(var j = 0; j < $scope.similarBandsArray.length; j ++){
                  $scope.allTheArtists.push($scope.similarBandsArray[j]);
                }
              }
            });
          };
查看此库:


它具有算法可能需要的所有功能,如数组之间的差异、过滤器等。

当找到第一个匹配项时,计数器变为1。然后创建一个对象beadedToMutual并将其插入数组。如何将计数设置为任何其他值

您的意思是将第二个if块移出第一个if块吗


现在,您为每个艺术家将计数器初始化为0,因此,如果您在第一个for循环之前移动var计数器=0,那么在最后,您将在计数器中拥有所有匹配项。感谢您的回复。我应该说得更具体些,但当我把计数器放在两个循环之外时,它会简单地按升序标记每个匹配,当我想让计数器记录相互作用者[I]与allTheArtists值匹配多少次时,例如,第一个值,如果它与其中两个值匹配,可以具有值2。谢谢。我确实认为lodash具备OP所需的功能,但也许一个具体的例子是合适的?从我第一次看到这个问题开始,他的问题是在循环中声明变量计数器。你是对的,lodash或下划线实际上可以使代码更加紧凑。我宁愿给这个人一根鱼竿,而不是喂他一天。。。lodash文档中有大量示例……感谢您的回复。我应该说得更具体些,但问题是当我把计数器放在for循环之外时,它会给每个匹配一个增量值match1.count=1,match2.count=2,等等,当我想让计数计算特定的相似带[I]与allTheArtistsArray中的值匹配的次数时,例如,如果第一个相似带[i]值与2 allTheArtists值匹配,则其计数为2,而不是1。谢谢。我现在可能理解你的问题了。您应该找到新数组中的元素并更新那里的计数器。我愿意帮助你。也许你可以用更清晰的输入和输出更新你的问题。例如,给出一个包含两个元素的数组,并描述结果应该是什么样子。
var counter = 0;
for (var x = 0; x < $scope.allTheArtists.length; x ++){
  if ($scope.similarBandsArray[i].name === $scope.allTheArtists[x].name){
    counter ++;
  }
  if (counter > 0) {
    var toBeAddedToMutual = {
      name: $scope.similarBandsArray[i],
      count: counter
    };
    $scope.newMatchingArray.push(toBeAddedToMutual);
  }
....
angular.forEach($scope.similarBandsArray, function(band) {
  var matches = $scope.allTheArtists.filter(function(artist) {
    return band.name === artist.name;
  });
  if (matches.length) {
    $scope.newMatchingArray.push({
      name: band, // maybe you mean band.name
      count: matches.length
    });
  }
  ....
});