Angular forEach与json比较?

时间:2016-07-19 09:08:07

标签: javascript angularjs json foreach

所以我有一个输入字段,可以从json1中获取数据。 在提交时,我希望将输入值与来自json2的数据进行比较,并根据结果做不同的事情,但由于我无法打破forEach,因此我无法理解它。我的代码正在执行,但是通过它全部而不是停止相应的if语句。

我已经看过几个讨论使用for-loop的线程,但也没有运气。有什么想法吗?

我想要这样的事情:

$scope.superButton = function() {
$http.get(superUrl)
    .then(function(res) {

        angular.forEach(res.data, function(item) {
            // If supertag exists, add to it
            if ($scope.id == item.tag.tag_id) {
                console.log('yay, tag is now supertag');

                $http({
                    method: 'PUT',
                    url: superUrl,
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    data: {
                        'title': $scope.title,
                        'subtitle': $scope.subtitle,
                        'tag': {
                            'title': $scope.selected,
                            'tag_id': $scope.id
                        }
                    }
                }).then(function(data, status, headers, config, statusText) {
                    console.log('added EXISTING supertag:' + data.statusText);

                }).catch(function(err) {
                    console.log(err.data.message);
                });
            }
            // If supertag doesn't exist, create it
            else if ($scope.id != item.tag.tag_id) {
                $http({
                    method: 'POST',
                    url: superUrl,
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    data: {
                        'title': $scope.title,
                        'subtitle': $scope.subtitle,
                        'tag': {
                            'title': $scope.selected,
                            'tag_id': $scope.id
                        }
                    }
                }).then(function(data, status, headers, config, statusText) {
                    console.log('added NEW supertag: ' + data.statusText);

                }).catch(function(err) {
                    console.log(err.data.message);
                });
            }
            // If
            else {
                console.log('no tags');
            }
        });
    });

};

1 个答案:

答案 0 :(得分:2)

您可以使用JavaScript Array.prototype.filter()来验证$http.get()响应是否包含supertag

$scope.superButton = function() {
    $http.get(superUrl)
        .then(function(res) {
            var len = res.data.filter(function(item) {
                    return $scope.id === item.tag.tag_id;
                }).length,
                method = (len) ? 'PUT' : 'POST',
                segmentUrl = (len) ? '/' + $scope.id : '',
                msg = (len) ? 'EXISTING supertag: ' : 'NEW supertag: ';

            $http({
                    method: method,
                    url: superUrl + segmentUrl,
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    data: {
                        'title': $scope.title,
                        'subtitle': $scope.subtitle,
                        'tag': {
                            'title': $scope.selected,
                            'tag_id': $scope.id
                        }
                    }
                })
                .then(function(data, status, headers, config, statusText) {
                    console.log(msg + data.statusText);
                })
                .catch(function(err) {
                    console.log(err.data.message);
                });
        });
};