如果属性不存在,则不显示对象的数据

时间:2015-01-23 23:17:55

标签: javascript angularjs

如果对象中缺少某个属性,我想选择不显示对象的数据。我正在从REST API调用数据,如果该项目不再可供购买,则会从对象中删除price_1属性。我已经对delete进行了一些研究,但据我所知,这只是为了删除对属性的引用,而不是对象。如果属性不存在,我不确定是否可以完全删除对象,但这将是理想的解决方案。我还想知道解决方案是否更适合作为自定义过滤器。

我尝试过以下方法:

angular.module('foldsApp.productModule', [])
    .controller('ProductsController', ['$scope', '$log', 'APIService', function ($scope, $log, APIService) {
        $scope.products = {};

        APIService.getData()
            .success(function(res) {
                $scope.products = res.results;
                for (price in $scope.products) {
                    if($scope.products[price].price_1 === 'undefined') {
                        // remove object?
                    }
                }
            })
            .error(function(data, status, headers, config) {
                $log.log('error: ' + data);
            });

    }]);

目前,if($scope.products[price].price_1 === 'undefined')等同于false。我不完全确定为什么会发生这种情况,但我认为这是因为price_1确实存在$scope.products中的大多数对象,而且我不确定如何使用那。这是我第一次涉足"更高"级别的JavaScript,所以有一些事情在我脑海中浮现。非常感谢任何有用的资源,谢谢。

HTML如果重要:

<ul>
    <li dir-paginate="product in products | itemsPerPage: 30">
        <a href="{{ product.link_1 }}"><img src="{{ product.category_product_image_placeholder_image }}" /></a>
        <br>
        {{ product.product_name_text }}
        <br>
        <strong>{{ product.price_1 | currency }}</strong>
    </li>
</ul>

1 个答案:

答案 0 :(得分:0)

要特别检查未定义,您应该使用typeof variable === 'undefined'

这样:

if(typeof $scope.products[price].price_1 === 'undefined'){
    delete $scope.products[price];
}

delete将删除对象的属性(它看起来像你的样子),如果它们没有在其他任何地方被引用,垃圾收集器就会把它们拿起来。