我有一个这样的对象结构:

{
  _id: {
    $oid: 'foo',
  },
  data: {
    john: {
     _doe: {
       $oid: 'bar'
     }
    }
  }
}


现在,我要按摩此对象,使其变为:

{
  _id: 'foo',
  data: {
    john: {
     _doe: 'bar'
    }
  }
}


换句话说,每个$oid实例都应将该值上移一个级别(或类似的值)。它可能发生在许多级别。

我试过了:

var loop = function(o) {
    for ( var i in o ) {
        if ( i == '$oid' ) {
            o = o[i];
        } else if ( typeof o[i] == 'object' ) {
            loop(o[i]);
        }
    }
    return o;
}
loop(obj);


但是它失败了,我无法解决……

最佳答案

您几乎拥有了它,只需要一个小修复:

var loop = function(o) {
    for ( var i in o ) {
        if ( i == '$oid' ) {
            o = o[i];
        } else if ( typeof o[i] == 'object' ) {
            console.log(o[i]);
            o[i] = loop(o[i]);
        }
    }
    return o;
}


您需要将循环结果分配给原始对象。

o[i] = loop(o[i]);

关于javascript - 递归对象消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12035079/

10-12 00:36
查看更多