javascript - 使用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]}}));
推荐阅读
- java - OpenCSV 将带有嵌套 bean 的对象转换为 csv
- python - 关于计算中国西藏林芝市“street_length_avg”的一些问题
- kubernetes - 在 OpenShift Container Platform 中哪里可以查看我的 CronJob?
- hibernate - JPQL Oder by Map 值
- node.js - 执行 res.render 后更改快速会话
- javascript - 单击复制按钮,JavaScript id 只是从数据库中复制第一个数据,我无法复制其他数据
- c++ - 为什么即使我没有明确包含源文件,Visual Studio 也会出现重复错误?
- hive - Hive 托管表获取“java.io.IOException: java.lang.IllegalArgumentException: bucketId out of range: -1 (state=,code=0)”
- java - JAX-RS 解析日期作为响应
- c++ - How to switch elements in a 9*9 matrix