Javascript 遍历对象并拾取键/值

Javascript 遍历对象并拾取键/值,javascript,jquery,Javascript,Jquery,我正在尝试从对象中的键创建数组。我可能在此结构中有一个对象: $scope.myobj = { 'level1': { 'level1Sub1': { 'result': 'level1-level1Sub1-result' }, 'level1Sub2': { 'result': 'level1-level1Sub2-result' } }, 'level2': { 'level2Sub1': {

我正在尝试从对象中的键创建数组。我可能在此结构中有一个对象:

 $scope.myobj = {
 'level1': {
    'level1Sub1': {
        'result': 'level1-level1Sub1-result'
    },
    'level1Sub2': {
          'result': 'level1-level1Sub2-result'
    }
  },
 'level2': {
    'level2Sub1': {
        'result': 'level2-level2Sub1-result'
    },
    'level2Sub2': {
          'result': 'level2-level2Sub2-result'
    }
  }
  }
同一级别上的元素位于同一数组中。 因此,在这种情况下,结果应该是:

TopLevelArr = [level1, level2]

SecondLevelArr = [level1Sub1, level1Sub2,level2Sub1,level2Sub2]
Im使用jquery遍历整个对象:

var path = "";

$.each($scope.myobj, walker);

function walker(key, value) {
    var savepath = path;

    path = path ? (path + "." + key) : key;
    console.log(path)


    if (value !== null && typeof value === "object") {
        // Recurse into children
        $.each(value, walker);
    }

    path = savepath;
}
如果我能找到一种方法根据密钥的级别将其传递到适当的数组中,这应该非常接近

谢谢你的帮助。多谢各位

var level=0;
var levelarray=[];
function looptrough(obj){
for(key in obj){
if(typeof obj[key]=="object"){
level++;
looptrough(obj[key]);
level--;
}
levelarray[level]=levelarray[level] || {};
levelarray[level][key]=obj[key];
}
}
looptrough({a:true;b:{c:true}});
Levelarray现在应该包含:

0:{a:true;b:{c:true}}
1:{c:true}

我认为在这种情况下使用jquery是非常不必要的,这就是为什么我在中使用了…

您可以使用迭代和递归方法来获取所有键

函数获取键(o){
功能iter(o,i){
var k=对象键(o);
键[i]=键[i]| |[];
k、 forEach(函数(kk){
if(键[i].indexOf(kk)<0){
键[i]。推(kk);
}
if(o[kk]!==null&&typeof o[kk]===='object'){
iter(o[kk],i+1);
}
});
}
var键=[];
iter(o,0);
返回键;
}
var$scope={};
$scope.myobj={'level1':{'level1Sub1':{'result':'level1-level1Sub1-result'},'level1Sub2':{'result':'level1-level1Sub2-result'},'level2':{'result':'level2-level2Sub1-result'},'level2Sub2':{'result':'level2-level2Sub2-result'};
log(getKeys($scope.myobj))

.as控制台包装{max height:100%!important;top:0;}
查看…Do level++;$。每个();级别--;than level应该包含您需要的数字…您是否一直只需要2个level?谢谢大家@charlietfl始终会有相同数量的级别。在示例中,我将其简化了一点。真正的一个将有大约5个级别。所以总是有相同数量的关卡。谢谢!太好了。谢谢你花时间帮忙。