列出具有关联键的JSON对象的所有属性

时间:2015-10-04 14:38:39

标签: javascript json

我现在已经试图解决这个问题很长一段时间了。我已经到了梦想的地步。 所以,我的意见是: -

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);
      }
    }
  }
}

0 个答案:

没有答案