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