无法使用javascript和angular删除空对象属性
我使用的是angular 1.6 我需要删除javascript对象的一些属性,如果它们为null、空或未定义 在我的例子中,我有两个空数组“byweekday”和“bymonth”,我是 试图从对象中删除它们,但未成功 我做错了什么 //加价无法使用javascript和angular删除空对象属性,javascript,angularjs,Javascript,Angularjs,我使用的是angular 1.6 我需要删除javascript对象的一些属性,如果它们为null、空或未定义 在我的例子中,我有两个空数组“byweekday”和“bymonth”,我是 试图从对象中删除它们,但未成功 我做错了什么 //加价 <button class="btn btn-xs btn-success" type="button" ng-click="makecalc()"> Ca
<button class="btn btn-xs btn-success" type="button"
ng-click="makecalc()">
Calculate
</button>
当值为
null
或undefined
时,您的代码只会删除一个键,因此,很明显,它不会删除空数组,因此您也需要检查它。因为typeof
也是“object”
,您需要先检查是否有可移动项。(另外,使用带有空检查的==
对null
和undefined
进行检查,因此我们也可以简化这一过程):
当值为
null
或undefined
时,您的代码只会删除一个键,因此,很明显,它不会删除空数组,因此您也需要检查它。因为typeof
也是“object”
,您需要先检查是否有可移动项。(另外,使用带有空检查的==
对null
和undefined
进行检查,因此我们也可以简化这一过程):
您的代码仅在值为
null
或undefined
不是空数组时删除键。为什么不在removempty()函数内创建一个全新的对象,并在for循环中分配属性,然后返回它?您好,我还尝试了:if(values.byweekday.length=0)delete values.byweekday;但它不起作用当值为null
或undefined
不是空数组时,您的代码只会删除一个键。为什么不在removeEmpty()函数中创建一个全新的对象,并在for循环中指定属性,然后返回它呢?您好,我还尝试了:if(values.byweekday.length=0)删除values.byweekday;但它不起作用嗨,它不起作用。数组未被删除removed@LuizAlves你说得对。这是typeof check,因为数组的typeof是“object”,你需要先检查一个空数组。我已经更新了答案。现在它工作了。但是为什么代码是:“if(values.byweekday.length=0)delete values.byweekday;“不起作用?比你,Rgthrehi先生,它不起作用。数组没有被激活。”removed@LuizAlves你说得对。这是typeof检查,因为数组的typeof是“object”,你需要先检查一个空数组。我已经更新了答案。现在它可以工作了。但是为什么代码是:“if(values.byweekday.length=0)delete values.byweekday;”不管用?比你还管用,三先生
$scope.repeticao={"wkst":1,"freq":{"id":0,"name":"Anualmente"},"byweekday":
[],"bymonth":[]};
function removeEmpty(obj) {
Object.keys(obj).forEach(function(key) {
if (obj[key] && typeof obj[key] === 'object') removeEmpty(obj[key])
else if (obj[key] === null || obj[key] === undefined) delete obj[key]
});
return obj;
};
$scope.makecalc=function(){
//debugger;
var key, value, date;
var values = angular.copy($scope.repeticao);
values=removeEmpty(values);
console.log(JSON.stringify(values));
}
function removeEmpty(obj) {
Object.keys(obj).forEach(function(key) {
if (obj[key] == null || (Array.isArray(obj[key]) && obj[key].length === 0)) {
delete obj[key];
} else if (typeof obj[key] === 'object') {
removeEmpty(obj[key]);
}
});
return obj;
};