我现在已经试图解决这个问题很长一段时间了。我已经到了梦想的地步。 所以,我的意见是: -
var obj = {
"one": {
"propOne": 1,
"propTwo" : {
"innerProp" : "hello"
},
"two": {
"twoProp": "something",
"twoProp2": {
"inside": "world",
"deep": {
"end": "ok"
}
}
}
}
非常标准的对象。如果属性的值是一个对象,我试图做的就是遍历并获取属性的密钥。所以,我的输出将是这样的: -
one
one.propTwo
one.propTwo.innerProp
two
two.twoProp2
two.twoProp2.deep
two.twoProp2.deep.end
到目前为止,我已经能够获得其价值为对象的所有属性,但我正在努力获得的结果正如上面的输出所示。
到目前为止我有这个: -
function isObject(obj) {
'use strict';
var result = false;
if (typeof obj === 'object' && obj !== null && Object.keys(obj).length > 0) {
result = true;
}
return result;
}
function recurse(obj, key) {
'use strict';
key = key || '';
if (isObject(obj)) {
for (var k in obj) {
if (isObject(obj[k])) {
var dot = key ? '.' : '';
key += key ? '.' + recurse(obj[k], k) : recurse(obj[k], k);
} else {
}
}
}
return key + ',';
}
如果你运行上面的代码,很明显输出远远不是我想要的,但它确实获得了显示所需的所有必要属性。 我只是踩着试图让它完全像我想要的那样展示。任何指针都会受到赞赏。它不必是递归的。我只是觉得通过递归更容易实现这一点。
小提琴Basarat
@Tomalak是对的,这是链接帖子的副本,但我发布的是通用解决方案而不是原帖中发布的解决方案。
var stack = [];
function saveStack(arr) {
stack.push(arr);
}
function recurse(obj, key) {
'use strict';
key = key || '';
for (var k in obj) {
if (obj.hasOwnProperty(k)) {
if (isObject(obj[k])) {
var dot = key ? '.' : '';
var stack = key + dot + k;
saveStack(stack);
recurse(obj[k], stack);
}
}
}
}