【问题标题】:Is there any way to remove the null values which I am getting in nested JSON objects in javascript or ES6 [closed]有什么方法可以删除我在 javascript 或 ES6 的嵌套 JSON 对象中得到的空值 [关闭]
【发布时间】:2020-03-02 04:24:52
【问题描述】:
[ 
   { 
      "name":"FY20",
      "children":[ 
         { 
            "name":"Quarter1",
            "children":[ 
               { 
                  "name":"2018_Oct 17 Manual"
               },
               { 
                  "name":"2018_Oct 17 Manual"
               }
            ]
         },
         { 
            "name":"Quarter2",
            "children":[ 
               null,
               null,
               { 
                  "name":"2018_Oct_fnfjnf 17 Manual"
               }
            ]
         },
         { 
            "name":"Quarter3",
            "children":[ 
               null,
               null,
               null,
               { 
                  "name":"2018_Octfdmfj 17 Manual"
               },
               { 
                  "name":"2015ldf_Oct 17 Manual"
               },
               { 
                  "name":"2018_Oct 17 Manual"
               }
            ]
         },
         { 
            "name":"Quarter4",
            "children":[ 
               null,
               null,
               null,
               null,
               null,
               null,
               { 
                  "name":"2018_dfdct 17 Manual"
               },
               { 
                  "name":"2018_fldfslt 17 Manual"
               }
            ]
         }
      ]
   },
   { 
      "name":"FY19",
      "children":[ 
         { 
            "name":"Quarter1",
            "children":[ 
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               { 
                  "name":"2018_Sep 17 Manual"
               },
               { 
                  "name":"2018_Oct 17 Manual"
               },
               { 
                  "name":"2018_Nov 17 Manual"
               }
            ]
         },
         { 
            "name":"Quarter2",
            "children":[ 
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               { 
                  "name":"2018_Dec 17 Manual"
               },
               { 
                  "name":"2019_Jan 17 Manual"
               },
               { 
                  "name":"2019_Feb 17 Manual"
               },
               { 
                  "name":"2019_Feb 06 Manual"
               }
            ]
         },
         { 
            "name":"Quarter3",
            "children":[ 
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               { 
                  "name":"2019_March 17 Manual"
               },
               { 
                  "name":"2019_April 17 Manual"
               },
               { 
                  "name":"2019_May 17 Manual"
               },
               { 
                  "name":"2019_May new_Manual"
               }
            ]
         },
         { 
            "name":"Quarter4",
            "children":[ 
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               { 
                  "name":"2019_Jun 17 Manual"
               },
               { 
                  "name":"2019_Jul 17 Manual"
               },
               { 
                  "name":"2019_Aug 17 Manual"
               }
            ]
         }
      ]
   },
   { 
      "name":"FY18",
      "children":[ 
         { 
            "name":"Quarter4",
            "children":[ 
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               null,
               { 
                  "name":"2019_Aug 17 Manual"
               },
               { 
                  "name":"2019_Aug 17 Manual"
               },
               { 
                  "name":"2019_Aug 17 Manual"
               }
            ]
         }
      ]
   }
]

其实我希望上面的 JSON 对象通过 javascript 或 ES6 没有空值

我尝试搜索了很多解决方案,但无法找到嵌套循环的正确解决方案,请提供解决方案或建议来帮助。

提前致谢

【问题讨论】:

  • 数组中的null 项应该发生什么?刚刚被过滤掉了?
  • 是的 Nicolas 值被过滤掉了

标签: javascript json ecmascript-6


【解决方案1】:

您可以通过检查值来过滤数据和children 属性。

这种方法会改变给定的数据。

const noNull = v => {
    if (v && typeof v === 'object' && Array.isArray(v.children)) v.children = v.children.filter(noNull);
    return v !== null;
};

var data = [{ name: "FY20", children: [{ name: "Quarter1", children: [{ name: "2018_Oct 17 Manual" }, { name: "2018_Oct 17 Manual" }] }, { name: "Quarter2", children: [null, null, { name: "2018_Oct_fnfjnf 17 Manual" }] }, { name: "Quarter3", children: [null, null, null, { name: "2018_Octfdmfj 17 Manual" }, { name: "2015ldf_Oct 17 Manual" }, { name: "2018_Oct 17 Manual" }] }, { name: "Quarter4", children: [null, null, null, null, null, null, { name: "2018_dfdct 17 Manual" }, { name: "2018_fldfslt 17 Manual" }] }] }, { name: "FY19", children: [{ name: "Quarter1", children: [null, null, null, null, null, null, null, null, { name: "2018_Sep 17 Manual" }, { name: "2018_Oct 17 Manual" }, { name: "2018_Nov 17 Manual" }] }, { name: "Quarter2", children: [null, null, null, null, null, null, null, null, null, null, null, { name: "2018_Dec 17 Manual" }, { name: "2019_Jan 17 Manual" }, { name: "2019_Feb 17 Manual" }, { name: "2019_Feb 06 Manual" }] }, { name: "Quarter3", children: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { name: "2019_March 17 Manual" }, { name: "2019_April 17 Manual" }, { name: "2019_May 17 Manual" }, { name: "2019_May new_Manual" }] }, { name: "Quarter4", children: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { name: "2019_Jun 17 Manual" }, { name: "2019_Jul 17 Manual" }, { name: "2019_Aug 17 Manual" }] }] }, { name: "FY18", children: [{ name: "Quarter4", children: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { name: "2019_Aug 17 Manual" }, { name: "2019_Aug 17 Manual" }, { name: "2019_Aug 17 Manual" }] }] }],
    result = data.filter(noNull);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    您可以简单地递归地映射这些值,并在每个级别使用filter(Boolean) 过滤掉假/空值。

    var data = [
      {
        "name": "FY20",
        "children": [
          {
            "name": "Quarter1",
            "children": [
              {
                "name": "2018_Oct 17 Manual"
              },
              {
                "name": "2018_Oct 17 Manual"
              }
            ]
          },
          {
            "name": "Quarter2",
            "children": [
              null,
              null,
              {
                "name": "2018_Oct_fnfjnf 17 Manual"
              }
            ]
          },
          {
            "name": "Quarter3",
            "children": [
              null,
              null,
              null,
              {
                "name": "2018_Octfdmfj 17 Manual"
              },
              {
                "name": "2015ldf_Oct 17 Manual"
              },
              {
                "name": "2018_Oct 17 Manual"
              }
            ]
          },
          {
            "name": "Quarter4",
            "children": [
              null,
              null,
              null,
              null,
              null,
              null,
              {
                "name": "2018_dfdct 17 Manual"
              },
              {
                "name": "2018_fldfslt 17 Manual"
              }
            ]
          }
        ]
      },
      {
        "name": "FY19",
        "children": [
          {
            "name": "Quarter1",
            "children": [
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              {
                "name": "2018_Sep 17 Manual"
              },
              {
                "name": "2018_Oct 17 Manual"
              },
              {
                "name": "2018_Nov 17 Manual"
              }
            ]
          },
          {
            "name": "Quarter2",
            "children": [
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              {
                "name": "2018_Dec 17 Manual"
              },
              {
                "name": "2019_Jan 17 Manual"
              },
              {
                "name": "2019_Feb 17 Manual"
              },
              {
                "name": "2019_Feb 06 Manual"
              }
            ]
          },
          {
            "name": "Quarter3",
            "children": [
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              {
                "name": "2019_March 17 Manual"
              },
              {
                "name": "2019_April 17 Manual"
              },
              {
                "name": "2019_May 17 Manual"
              },
              {
                "name": "2019_May new_Manual"
              }
            ]
          },
          {
            "name": "Quarter4",
            "children": [
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              {
                "name": "2019_Jun 17 Manual"
              },
              {
                "name": "2019_Jul 17 Manual"
              },
              {
                "name": "2019_Aug 17 Manual"
              }
            ]
          }
        ]
      },
      {
        "name": "FY18",
        "children": [
          {
            "name": "Quarter4",
            "children": [
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              null,
              {
                "name": "2019_Aug 17 Manual"
              },
              {
                "name": "2019_Aug 17 Manual"
              },
              {
                "name": "2019_Aug 17 Manual"
              }
            ]
          }
        ]
      }
    ]
    
    var newData = filterData(data);
    
    function filterData(data) {
       return data.map(item => {
        if(item && item.children) {
          return {
            ...item,
            children: filterData(item.children)
          }
        }
        return item
       }).filter(Boolean)
    }
    console.log(newData);

    【讨论】:

      【解决方案3】:

      null 值似乎只出现在一个列表中,而且很容易处理,只需将您的数据转换为字符串并将所有出现的null 替换为空字符串/不带,

      const data = [{"name":"FY20","children":[{"name":"Quarter1","children":[{"name":"2018_Oct 17 Manual"},{"name":"2018_Oct 17 Manual"}]},{"name":"Quarter2","children":[null,null,{"name":"2018_Oct_fnfjnf 17 Manual"}]},{"name":"Quarter3","children":[null,null,null,{"name":"2018_Octfdmfj 17 Manual"},{"name":"2015ldf_Oct 17 Manual"},{"name":"2018_Oct 17 Manual"}]},{"name":"Quarter4","children":[null,null,null,null,null,null,{"name":"2018_dfdct 17 Manual"},{"name":"2018_fldfslt 17 Manual"}]}]},{"name":"FY19","children":[{"name":"Quarter1","children":[null,null,null,null,null,null,null,null,{"name":"2018_Sep 17 Manual"},{"name":"2018_Oct 17 Manual"},{"name":"2018_Nov 17 Manual"}]},{"name":"Quarter2","children":[null,null,null,null,null,null,null,null,null,null,null,{"name":"2018_Dec 17 Manual"},{"name":"2019_Jan 17 Manual"},{"name":"2019_Feb 17 Manual"},{"name":"2019_Feb 06 Manual"}]},{"name":"Quarter3","children":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,{"name":"2019_March 17 Manual"},{"name":"2019_April 17 Manual"},{"name":"2019_May 17 Manual"},{"name":"2019_May new_Manual"}]},{"name":"Quarter4","children":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,{"name":"2019_Jun 17 Manual"},{"name":"2019_Jul 17 Manual"},{"name":"2019_Aug 17 Manual"}]}]},{"name":"FY18","children":[{"name":"Quarter4","children":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,{"name":"2019_Aug 17 Manual"},{"name":"2019_Aug 17 Manual"},{"name":"2019_Aug 17 Manual"}]}]}];
      
      const res = JSON.stringify(data).replace(/null,?/g, "");
      
      console.log(JSON.parse(res));

      【讨论】:

      • 感谢大家的快速响应和帮助,非常有帮助并清除了我的概念,所有解决方案都按预期工作
      【解决方案4】:

      使用递归过滤器

      const filterNulls = values => {
        return values.filter(value => {
         if (value && value.children) {
            value.children = filterNulls(value.children);
          }
          return value;
        });
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        • 2021-05-17
        • 2021-03-18
        • 2020-08-10
        相关资源
        最近更新 更多