Skip to content

强大的 JSON.stringify 方法

Published: at 06:54 AMSuggest Changes

一次对树状数据的简单处理,一位大佬提供的方法,让我对 JSON.stringify 方法有了新的认识,开始我仅仅将它当做一个数据格式化成字符串的方法。

需求

处理以下树状数据,优雅的替换其中的 childrenerzi

let defaultData = [
  {
    name: '活动名称一',
    description: '这个活动真好玩',
    type: 'string',
    required: 'false',
    isShown: 'false',
  },
  {
    name: '活动名称二',
    description: '这个活动真好玩',
    type: 'number',
    required: 'false',
    isShown: 'true',
    children: [
      {
        name: '活动名称 123',
        description: '这个活动真好玩',
        type: 'integer',
        required: 'false',
        isShown: 'false',
        children: [
          {
            name: '活动名称 456',
            description: '这个活动真好玩',
            type: 'boolean',
            required: 'false',
            isShown: 'false',
            children: [
              {
                name: '活动名称 789',
                description: '这个活动真好玩',
                type: 'object',
                required: 'false',
              },
            ],
          },
        ],
      },
    ],
  },
];

解决方法

在群里问了一下,大家的答案五花八门的,挑几个厉害的

  1. 格式化成字符串,替换其中的字符
JSON.parse(
  JSON.stringify(defaultData).replaceAll(',"children":[', ',"erzi":[')
);
  1. 写个方法递归处理,这儿就不写了~~(以后有时间再说)~~
  2. 优雅的使用 JSON.stringify() 特性处理。注意一下官方文档说明:JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。
JSON.stringify(
  defaultData,
  (k, v) => {
    if (v.children) {
      const c = v.children;
      v.erzi = c;
      delete v.children;
    }
    return v;
  },
  2
);

当我看到第三种方法的时候,我直接~~我*~~三连,太强了,太优雅了,太满意了。

由此而来的衍生方法

删除树状数据中不需要的属性,比如 id

JSON.stringify(
  defaultData,
  (k, v) => {
    delete v.id;
    delete v.time;
    return v;
  },
  2
);

对树状数据中的数据进行格式化

JSON.stringify(
  defaultData,
  (k, v) => {
    if (v && v.isShown) {
      const f = v.isShown ? 'true' : 'false';
      v.isShown = f;
    }
    return v;
  },
  2
);

找到 name 为 123 的数并输出到数组中

let arr = [];
JSON.stringify(
  defaultData,
  (k, v) => {
    if (v && v.name == 123) {
      arr.push(v);
    }
    return v;
  },
  2
);

后记

最后我对树状数据的处理就是JSON.stringify一把梭,越用越香。

可能方法看上去就那样,挺简单?但是这个技巧在某些场合下,可以节省不少时间。反正我觉得挺 nb。

然后这位大佬在招人,我没敢去他家厂子,实在是失策了。太强了,实在是太强了。

PS: 进这个大佬厂子一年,有大佬带,进去一年顶普通厂子三年,想去的可以给我留言。


Previous Post
递归树状数据,查找祖先节点并数组输出
Next Post
Linux 配置数据库远程连接:Iptables 开启 3306 端口