CodingYang

vuePress-theme-reco Rackar    2018 - 2024
CodingYang CodingYang

Choose mode

  • dark
  • auto
  • light
首页
类别
  • 技术
  • 个人
  • 思考
  • 儿童
标签
时间线
联系
  • 关于
  • RSS订阅 (opens new window)
  • GitHub (opens new window)
  • 简书 (opens new window)
  • CSDN (opens new window)
  • WeChat (opens new window)
GitHub (opens new window)
author-avatar

Rackar

67

文章

44

标签

首页
类别
  • 技术
  • 个人
  • 思考
  • 儿童
标签
时间线
联系
  • 关于
  • RSS订阅 (opens new window)
  • GitHub (opens new window)
  • 简书 (opens new window)
  • CSDN (opens new window)
  • WeChat (opens new window)
GitHub (opens new window)
  • 去掉 js 对象键中包含的点

    • 起因
      • 代码
        • 说明

        去掉 js 对象键中包含的点

        vuePress-theme-reco Rackar    2018 - 2024

        去掉 js 对象键中包含的点


        Rackar 2019-10-20 Node.js

        # 起因

        写一个 node 爬虫存数据到 MongoDB 的时候,遇到了键为"PM2.5"这种情况,写入 MongoDB 时会报错。

        http://www.codingyang.com/article_tech/nodeCrawl.html

        做了一个小轮子,迭代对象下所有分支的 key,将所有带点.的都替换为下划线_。

        也许以后还会用到,记录一下。

        # 代码

        function parseObjReplaceDot(obj) {
          if (obj.constructor !== Object) {
            throw new Error("只支持对象类型,数组请遍历调用");
          }
          let newObj = {};
          for (let key in obj) {
            var newkey = key.replace(/\./g, "_"); //将.全部替换为_
            let isObj = obj[key].constructor === Object;
            let isArr = obj[key].constructor === Array;
            if (isObj) {
              newObj[newkey] = parseObjReplaceDot(obj[key]);
            } else if (isArr) {
              let newArr = [];
              obj[key].forEach(arrObj => {
                if (arrObj.constructor === Object || arrObj.constructor === Array) {
                  newArr.push(parseObjReplaceDot(arrObj));
                } else {
                  newArr.push(arrObj);
                }
              });
              newObj[newkey] = newArr;
            } else {
              newObj[newkey] = obj[key];
            }
          }
          return newObj;
        }
        
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27

        # 说明

        第一层只接受对象。如果下面有值是数组或者对象,则迭代遍历。

        参与编辑此文章 (opens new window)
        更新于: 3/22/2020, 11:16:45 PM