[英]Having trouble creating a new array of objects in angular (loop inside of loop)
我想做的是比较两个数组“ similarBands”和“ artistsArray”。 我想记下两个数组中发生的每个匹配(这是我创建计数器的逻辑)。 我要寻找的最终结果是一个新的对象数组(称为newMatchingArray),这两个数组的所有匹配项都将具有name属性和matchs属性(指示存在多少个匹配项)。
该函数现在可以正确找到匹配项,但不会在每次匹配中都增加“计数器”,而是在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]);
}
}
});
};
当找到第一个匹配项时, counter
将变为1。然后创建一个toBeAddedToMutual
对象,并将其插入到数组中。 计数如何可以是其他任何值?
您是要从第二个if-block
移出第二个if-block
if-block
吗?
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);
}
....
就像@FernandoPinheiro所建议的那样,您可以使用lambda表达式来缩短代码。
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
});
}
....
});
查看此库: https : //lodash.com/
它具有算法可能需要的所有功能,例如数组,过滤器之间的差异等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.