繁体   English   中英

满足条件后将对象推送到空数组

[英]Push object to empty array after condition is met

我创建了一些服务,这些服务从REST API抓取数据。 这些服务返回带有名称,ID和一些与foobar名称有关的唯一键的对象。 我也有一项针对企业的服务,也提供名称,ID以及与该企业相关的foo / bar

不幸的是,用于此的数据模型不理想。 而不是仅仅示出了foo / bar附加到企业,它拥有每一个foobar与一对每一单业务published: true/false键/值对。

我想做的是获取URL名称,遍历我的foo对象,检查当前URL中的名称和数据是否匹配,以及是否确实将该对象存储在$scope.results 在这里,我想遍历我的business对象,并检查其conditionData id是否与新的$scope.results数组的id相匹配。 满足此条件后,我要将这些业务存储在$scope.businesses数组中。 就目前情况而言,我得到的是所有公司的退货,而不仅仅是与当前$scope.results id相同的id的那些。 我怀疑问题是a)我是菜鸟(最有可能)或b)已published: true/false在造成问题。

在此先感谢您的帮助,如果需要其他说明,请告诉我。 我仍然对Angular和JS整体还很陌生,所以我不确定我尝试这样做的方式是否超级理想。 如果有人的话,我愿意提出更好的主意。

.controller('ResultsController', function($scope, $location, getData) { 
    $scope.businesses = [];
    $scope.results = [];

    var url = $location.path().split('/')[2];    // we do this because it's always going to follow a pattern of /:base/:name

    function init() {

        getData.getConditions().success(function(data) {
            var tempCondition = data;
            var tempData;

            for (var condition in tempCondition) {
                tempData = tempCondition[condition];
                if (url === tempData.name) {
                    $scope.results = tempData;
                }
            }
        })  
        .error(function(data, status, headers, config) {
            console.log('err: ' + data);
        });

        getData.getBusinesses().success(function(data) {
            var tempBusinesses = data,
                tempConditionData;

            for (var business in tempBusinesses) {
                tempConditionData = tempBusinesses[business].conditionData;

                for (var condition in tempConditionData) {
                    if (tempConditionData[condition].id === $scope.results.id) {
                        $scope.businesses.push(tempBusinesses[business]);
                    }   
                }
            }
        })
        .error(function(data, status, headers, config) {
            console.log('err: ' + data);
        });

    }

    init();
});

您正在使用的两个http调用也可能会出现问题,因为它们彼此依赖。 如果第一个调用需要一些时间,您的第二个http调用将首先返回。

我发现自己大部分时间都将SO用作橡皮鸭,一旦输入完问题,我就基本知道了。 这是由于published: true/false key / val对。

我要做的就是改变

for (var condition in tempConditionData) {
    if (tempConditionData[condition].id === $scope.results.id) {
        $scope.businesses.push(tempBusinesses[business]);
    }   
}

for (var condition in tempConditionData) {
    if (tempConditionData[condition].id === $scope.results.id && tempConditionData[condition].published === true ) {
        $scope.businesses.push(tempBusinesses[business]);
    }   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM