javascript - 使用 javascript 获取每个级别的 json 值

标签 javascript json

我正在尝试使用递归函数从简单的 json 中获取最后一个键值,使用 javascript

我有这个 json:

{
  'a': {
    'b': {
      'c': 12,
      'd': 'Hello World'
    },
    'e': [1,2,3]
  }
}

我的预期结果是:

{
  'a/b/c': 12,
  'a/b/d': 'Hello World',
  'a/e': [1,2,3]
}

我正在尝试:

function getDeepKeys(obj) {
    var keys = [];
    for (var key in obj) {
        keys.push(key);
        if (typeof obj[key] === "object") {
            var subkeys = getDeepKeys(obj[key]);
            keys = keys.concat(subkeys.map(function (subkey) {
                return key + "/" + subkey;
            }));
        }
    }
    return keys;
} 

但出于某种原因,它返回了我:

a/b/c/d/e/0/1/,我不确定为什么要在那里添加这些数字。 有人知道我该怎么做吗?

最佳答案

您可以使用比递归开销更少且不会破坏调用堆栈的显式堆栈迭代地执行此操作:

const pathify = o => {
  const paths = {};
  const stack = [[o, []]];
  
  while (stack.length) {
    const [curr, path] = stack.pop();
    
    for (const k in curr) {
      if (typeof curr[k] === "object" && !Array.isArray(curr[k])) {
        stack.push([curr[k], path.concat(k)]);
      }
      else {
        paths[`${path.join("/")}/${k}`] = curr[k];
      }
    }
  }
  
  return paths;
};

console.log(pathify({'a':{'b':{'c':12,'d':'Hello World'},'e':[1,2,3]}}));

关于javascript - 使用 javascript 获取每个级别的 json 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52921401/

相关文章:

c# - 从流中加载多个串联的 JSON 对象

javascript - Babel 和 Webpack 正在抛出 "Can' t resolve 'regenerator-runtime/runtime' "

javascript - 检查在 jQuery 中选中的所有复选框

javascript - JavaScript 代码中的语法错误

android - 使用 JSONArray 或普通数组来存储/读取数据是否更有效?

iphone - 将新地点添加到 Google 地方信息

android - 如何仅从 json 解析直接 json 对象

javascript - Div 屏幕截图,Javascript 和 html2canvas.js 部分工作

javascript - 无法在 Google Pay TEST 环境和订单总额中添加测试卡

javascript - 将几个json传递给javascript