碎片时间学编程「67]:从对象或数组中深度删除所有虚假值

处理流程:

使用递归。

初始化可迭代数据,使用 Array.isArray(),Array.prototype.filter() 和 Boolean 处理数组数据以避免稀疏数组。

使用 Object.keys() 和 Array.prototype.reduce() 以适当的初始值遍历每个键。

使用Boolean 确定每个键值的真实性,如果真实则将其添加到累加器中。

使用 typeof 确定给定值是否为 一个 object 并再次调用该函数以对其进行深度压缩。

JavaScript

const compactObject = val => {

  const data = Array.isArray(val) ? val.filter(Boolean) : val;

  return Object.keys(data).reduce(

    (acc, key) => {

      const value = data[key];

      if (Boolean(value))

        acc[key] = typeof value === 'object' ? compactObject(value) : value;

      return acc;

    },

    Array.isArray(val) ? [] : {}

  );

};

示例代码如下所示:

const obj = {

  a: null,

  b: false,

  c: true,

  d: 0,

  e: 1,

  f: '',

  g: 'a',

  h: [null, false, '', true, 1, 'a'],

  i: { j: 0, k: false, l: 'a' }

};

compactObject(obj);

// { c: true, e: 1, g: 'a', h: [ true, 1, 'a' ], i: { l: 'a' } }

更多内容请访问我的网站:https://www.icoderoad.com

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容