Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归对象消息_Javascript_Object_Recursion - Fatal编程技术网

Javascript 递归对象消息

Javascript 递归对象消息,javascript,object,recursion,Javascript,Object,Recursion,我有一个结构如下的对象: { _id: { $oid: 'foo', }, data: { john: { _doe: { $oid: 'bar' } } } } 现在我想按摩这个物体,使它变成: { _id: 'foo', data: { john: { _doe: 'bar' } } } 换句话说,$oid的每个实例都应该将该值向上移动一个级别(或类似的级别)。它可能发生在许多

我有一个结构如下的对象:

{
  _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]);

您几乎拥有它,只需要一个小补丁:

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

分配返回值无疑是这里的问题!分配返回值无疑是这里的问题!