在angular(循环中的循环)中创建新的对象数组时遇到麻烦
Having trouble creating a new array of objects in angular (loop inside of loop)
我想做的是比较两个数组"similarBands"answers"artistsArray"。我想记录两个数组中出现的每一个匹配(这是我创建计数器背后的逻辑)。我要寻找的最终结果是一个新的对象数组(称为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]);
}
}
});
};
当您找到第一个匹配时,counter
变为1。然后创建一个对象toBeAddedToMutual
并将其插入数组。计数怎么可能是其他值呢?
你的意思是把第二个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/
它包含了你的算法可能需要的所有函数,比如数组之间的差异,过滤器等
相关文章:
- 如何将angularjs中的javascript字符串输出为循环数组
- 如何从某个位置顺时针和逆时针循环数组
- 赢得't循环数组javascript
- 通过循环数组内容
- 使用RegExp循环数组而不是for循环(Javascript)
- 如何在背景图像的循环数组中预加载图像
- 如何在循环数组内部推送变量值
- Javascript循环数组无限不起作用
- 如何循环数组
- 如何使用Handlebars循环数组对象和模板
- PHP同时循环数组数据显示到javascript中
- 如何使用上一个/下一个功能循环数组中的图像
- 如何循环数组并保持它们之间的索引增长
- Javascript循环数组以查找可被3整除的数字
- 以变量作为属性的循环数组
- 嵌套的“for”循环 - 数组未定义
- 在具有主干和车把的模型中循环数组
- 数组在 for 循环与第二个 for 循环数组 JavaScript 合并
- 对于javascript和jquery的循环数组问题
- 在循环数组 javascript 后替换对象属性值中的字符串