使用Angular并尝试根据两个数组的比较返回结果。这就是我所拥有的:
$scope.fbFriends = [{"id":1234,"name":'bob'},
{"id":4567,"name":'john'},
{"id":8910,"name":'totoro'}];
$scope.appFriends = [{"id":1,"name":'bob',"fb_id":1234},
{"id":2,"name":'john',"fb_id":4567}];
我想过滤两者中存在的朋友,只返回appFriends中不存在的fbFriends中的朋友。 这就是我所做的,但它不起作用,它返回方式太多次了。
$scope.not_friends = [];
$scope.filtered = [];
for (var i=0; i < $scope.fbFriends.length; i++) {
for (var j=0; j < $scope.appFriends.length; j++) {
if ($scope.fbFriends[i].id !== $scope.appFriends[j].fb_id) {
$scope.not_friends = $scope.fbFriends[i];
$scope.filtered.push($scope.not_friends);
}
}
};
console.log($scope.filtered);
这种方法有什么问题? 奖金,我可以将其整合到过滤器中并在fbFriends的ng-repeat中使用它吗?
谢谢!
答案 0 :(得分:0)
问题是$baseDir
:您必须检查是否相等然后 - 因为您正在搜索未包含在fbFriends中的朋友 - 请删除该对象。
我已经重写了您的代码,它似乎正常运行。
if block
有关进一步参考,请参阅算法手册(我的建议是Introduction to Algorithms,Thomas H. Cormen,但任何人都会这样做。)
答案 1 :(得分:0)
这是一个通用的集合差异操作
difference = function(a, b, eq) {
return a.filter(function(x) {
return b.every(function(y) {
return !eq(x, y)
});
});
}
其中a, b
是数组,eq
- 相等函数。
这就是如何将它应用于您的问题:
fbFriends = [{"id":1234,"name":'bob'},
{"id":4567,"name":'john'},
{"id":8910,"name":'totoro'}];
appFriends = [{"id":1,"name":'bob',"fb_id":1234},
{"id":2,"name":'john',"fb_id":4567}];
difference = function(a, b, eq) {
return a.filter(function(x) {
return b.every(function(y) {
return !eq(x, y)
});
});
}
onlyFb = difference(fbFriends, appFriends, function(f, a) {
return f.id === a.fb_id
});
document.write(JSON.stringify(onlyFb))