如何将js对象转换为点表示法字符串

Sh *_*eeb -3 javascript

我有一个像这样的 javascript 普通对象:{a: {b: 1} } 并且我想将其转换为像这样的点符号字符串a.b = 1

用例:

将对象发送到纯文本环境(例如 cli)或作为 url 参数。

AKX*_*AKX 5

很难判断这是否是您想要的,但是这样的东西会将对象树扁平化为点路径列表......

var data = {
  a: {
    b: 1,
    c: {
      d: 8
    }
  },
  e: {
    f: {
      g: 9
    },
    h: 10,
    i: [1, 2, 3]
  }
};


function toDotList(obj) {
  function walk(into, obj, prefix = []) {
    Object.entries(obj).forEach(([key, val]) => {
      if (typeof val === "object" && !Array.isArray(val)) walk(into, val, [...prefix, key]);
      else into[[...prefix, key].join(".")] = val;
    });
  }
  const out = {};
  walk(out, obj);
  return out;
}

console.log(toDotList(data));
Run Code Online (Sandbox Code Playgroud)