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

时间:2015-02-06 18:46:58

标签: javascript arrays angularjs

我已经创建了一些从REST API中获取数据的服务。这些服务返回带有名称,ID和一些与foobar名称相关的唯一键的对象。我也有一项服务为企业做同样的事情,也有名称,ID,以及foo / bar与该业务相关联的服务。

不幸的是,这个数据模型......并不理想。不是仅显示哪个foo / bar附加到该商家,而是每个商家都有foobar published: true/false个/ { val pair。

我尝试做的是获取URL名称,遍历我的foo对象,检查当前URL中的名称和数据是否匹配,以及是否存储该对象在$scope.results。从这里开始,我想遍历我的业务对象并检查其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();
});

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我发现自己大部分时间都使用SO作为橡皮鸭,我基本上在输入问题时就把它弄清楚了。这是由于published: true/false键/值对。

我所要做的就是改变

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]);
    }   
}