比较Angularjs中2个数组之间的对象

时间:2014-05-23 12:58:31

标签: javascript angularjs

我试图找到最好的方法来做到这一点,因为会有很多数据,而且我不想让巨大的循环占用资源。我有很多常规的javascript / jquery经验,但我是Angular的新手,并希望使用Angularjs最佳实践。

我有一个items列表,用户可以&#34;收藏&#34;他们。在查看所有items时,我想通过用指标标记它们来显示所支持的itemsfavorites$scope.favorites = [];//$http.get of JSON file $scope.items = [];//$http.get of JSON file $scope.isFavorite = function(itemId) { var len = $scope.favorites. !== 'undefined' ? $scope.favorites.length : 0; for(var i = 0; i < len; i++) { if($scope.favorites[i].id === itemId) { return true; } } }; 都位于不同的表中,并以具有不同ID的JSON格式返回。

JS:

<div ng-repeat="item in items">
    <i ng-class="isFavorite(item.id) ? 'icon-bookmark' : 'icon-bookmark-empty'"></i>
</div>

HTML:

isFavorite

我还有其他一些检查&#34; {{1}}&#34;所以我试图找出比较2的最好方法,而不是每次都在循环中检查。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我能想到的最佳方式是在收藏夹http请求返回其数据后修改$ scope.items数组,并设置一个“收藏夹”数据。每个项目的布尔属性。

这样,你的isFavourite方法不会在每个摘要周期触发。例如:

var promises = [$http.get('/items'), $http.get('/favourites')];

$q.all(promises).then(function (resultsArray) {

    $scope.items = resultsArray[0];
    var favourites = resultsArray[1];

    $scope.items.forEach(function (item) {
        var matches = favourites.filter(function (f) {
                return f.id === item.id;
            });
        item.favourite = matches.length ? true : false;
    });

});

同样值得注意的是,您可能希望在$ q.all方法中包装两个http请求,以便在两个http请求完成后可以触发一个回调。

编辑:更新以显示$ q.all实现的完整代码

相关问题