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

Javascript 满足条件后将对象推送到空数组,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我已经创建了两个从RESTAPI获取数据的服务。这些服务返回具有名称、ID和一些与foo或bar名称相关的唯一键的对象。我还为企业提供了一项同样的服务,包括名称、ID以及与该企业相关的foo/bar 不幸的是,这方面的数据模型……并不理想。它不只是显示哪个foo/bar附加到该业务,而是为每个业务都提供了foo或bar,并带有published:true/falsekey/val对 我试图做的是获取URL名称,在我的foo对象中循环,检查当前URL中的名称和数据是否匹配,以及它们是否将该对象存储

我已经创建了两个从RESTAPI获取数据的服务。这些服务返回具有名称、ID和一些与
foo
bar
名称相关的唯一键的对象。我还为企业提供了一项同样的服务,包括名称、ID以及与该企业相关的
foo
/
bar

不幸的是,这方面的数据模型……并不理想。它不只是显示哪个
foo
/
bar
附加到该业务,而是为每个业务都提供了
foo
bar
,并带有
published:true/false
key/val对

我试图做的是获取URL名称,在我的
foo
对象中循环,检查当前URL中的名称和数据是否匹配,以及它们是否将该对象存储在
$scope.results
中。从这里,我想循环我的业务对象,检查它的
条件数据
id是否与新的
$scope.results
数组的id匹配。一旦满足此条件,我想将这些业务存储在
$scope.businesss
数组中。目前,我正在返回所有业务,而不仅仅是那些与当前
$scope.results
id具有相同id的业务。我怀疑问题可能是a)我是noob(最有可能)或b)发布的
是真/假
正在产生问题

提前感谢您的帮助,如果我还需要澄清什么,请告诉我。我对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]);
    }   
}


使用SO作为橡皮鸭我可能应该在英语StackExchange上问这个问题,但是使用某物作为橡皮鸭意味着什么?基本上,你向字面上的橡皮鸭(或任何对象)详细解释你正在尝试做什么,你尝试做什么,以及预期结果是什么然后你的大脑计算出细节,并想出不同的方法来解决。是的,这是另一件事,我必须去做,使它更优化。你有什么建议吗?编辑:忽略,这与我的问题无关。那是另一个时间的单独话题。
for (var condition in tempConditionData) {
    if (tempConditionData[condition].id === $scope.results.id && tempConditionData[condition].published === true ) {
        $scope.businesses.push(tempBusinesses[business]);
    }   
}