Javascript - 引用嵌套对象

时间:2012-01-13 23:41:43

标签: javascript object reference nested

我有一个相当复杂的嵌套对象,例如:

A = {b : {c : { d : [{e:false},{g:true}] } } }

通过一些算法,我找到了d

现在我有了A, Z = clone(A)

的克隆

我希望能够修改d中的Z。我怎么能以某种方式存储d的位置,以便我可以在Z中找到该位置并进行修改。如果这是一个列表,我可以存储索引并在同一索引处修改。我当然可以在树上搜索d,但我不能假设唯一的属性名称,即使我可以这样也会很慢

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

当您的算法找到d时,请创建一组属性以指定如何找到d。在这种情况下,它看起来像这样

["b", "c", "d"]

然后你可以循环遍历集合来遍历Z克隆d

properties = ["b", "c", "d"];
newD = Z;
for(var i = 0; i < properties.length; i++){
  newD = newD[properties[i]];
}

答案 1 :(得分:0)

如果我理解正确,你所寻求的是通向d - “b.c.d”的道路。所以,如果你有d--

//untested, should return path in dot notation b.c.d
function findPath(o,t,n,p){
  if (typeof p=='undefined') {
    p='';
  }
  if (typeof n=='undefined') {
    n='';
  }
  if (o===t) {
    if (p=='') {
      return n;
    }else{
      return p+'.'+n;
    }
  }
  if (typeof o!='object') {
    return p;
  }
  for (var i in o) {
    var j=o[i];
    var xp=p;
    p=findPath(j,d,i,p);
    if (xp!=p) {// found
      return p;
    }
  }
  return p;
}
// call it
var s=findPath(A,d);
// s="b.c.d"