如果对象中缺少某个属性,我想选择不显示对象的数据。我正在从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>
答案 0 :(得分:0)
要特别检查未定义,您应该使用typeof variable === 'undefined'
:
这样:
if(typeof $scope.products[price].price_1 === 'undefined'){
delete $scope.products[price];
}
delete将删除对象的属性(它看起来像你的样子),如果它们没有在其他任何地方被引用,垃圾收集器就会把它们拿起来。