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

Don't display object's data if property doesn't exist

本文关键字:显示 对象 数据 属性 不存在 如果      更新时间:2023-09-26

如果对象中缺少属性,我想选择不显示对象的数据。我正在从 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>

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

所以:

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

删除对象的属性(这就是它看起来的样子),如果它们没有在其他任何地方引用,垃圾回收器将拾取它们。