无法使用javascript和angular删除空对象属性

无法使用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

我使用的是angular 1.6

我需要删除javascript对象的一些属性,如果它们为null、空或未定义

在我的例子中,我有两个空数组“byweekday”和“bymonth”,我是 试图从对象中删除它们,但未成功

我做错了什么

//加价

<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;
};