【问题标题】:Recursively remove blank object and array from json object using loadsh in angular 2使用角度2中的lodash递归地从json对象中删除空白对象和数组
【发布时间】:2017-09-01 08:24:20
【问题描述】:

我尝试在 angular2 中使用 lodash 随后从我的 json 对象中删除所有空白对象和数组对象,但在对象中未正确解析。

我的 Json 对象:

{
  "personal": {
    "strenths": {},
    "books": [{},{},{"Perority1": "Test","level": ""},{"Perority2": "","level": ""},{"courses": [{},{},{}]}]
  },
  "eduction": [{},{},[{}]]
};

尝试使用方法删除

clean(obj) {
     console.log("Enter in a Clean() Method::::");
     Object.keys(obj).forEach(key => {
         if ($.isArray(obj[key])) {
             obj[key] = $.remove(obj[key], function(n) {
                 if ($.isObject(n) && (n === null || n === undefined || $.isEmpty(n))) {
                     return false;
                 } else {
                     return true;
                 }
             });
             console.log("After Change Array:::::" + JSON.stringify(obj[key]));
             if (obj[key] === null || obj[key] === undefined || $.isEmpty(obj[key])) {
                 delete obj[key];
             } else {
                 this.clean(obj[key]);
             }

         } else if ($.isObject(obj[key])) {

             if (obj[key] === null || obj[key] === undefined || $.isEmpty(obj[key])) {
                 delete obj[key];
             } else {
                 this.clean(obj[key]);
             }
         }
     });
     return obj;
 }

我的输出:

{"personal":{"books":[{"Perority1":"Test","level":""},{"Perority2":"","level":""},{}]},"eduction":[null]}

预期输出:

{"personal":{"books":[{"Perority1":"Test","level":""},{"Perority2":"","level":""}]}}

【问题讨论】:

    标签: angular lodash


    【解决方案1】:

    您可以将对象字符串化,并让您回调(JSON.parse 的第二个参数)在从字符串解析它时执行递归,以删除属性,而不是复杂的递归,并在其中更改对象,只需返回未定义;

    var data = {
      "personal": {
        "strenths": {},
        "books": [{},{},{"Perority1": "Test","level": ""},{"Perority2": "","level": ""},{"courses": [{},{},{}]}]
      },
      "eduction": [{},{},[{}]]
    };
    
    data = JSON.parse(JSON.stringify(data), function(k, v){
        if (Array.isArray(v)) {
            var fArr = v.filter(e=>e);
            return fArr.length && fArr || undefined;
        } else if(typeof(v) === "object" && !Object.keys(v).length) {
            return undefined;
        } else {return v};
    });
    
    console.log(JSON.stringify(data));

    但是代码可以更好,我只是根据您的要求即时编写的。

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多