2012-12-17 3 views
0

한다고 가정 JQuery와 트리 오브젝트에 값을 추가.내가 그런 물체가

var t = { 
    "obj1": { 
     "obj1.1": "test", 
     "obj1.2": { 
      "obj1.1.1": null, // <-- "obj1.1.1" has to have a value. 
      "obj1.1.2": "test" 
     } 
    } 
}; 

내가 값을 추가 할 노드까지의 경로, 즉 :

var path = ['obj1', 'obj1.1', 'test']; 

어떻게 프로그래밍 방식으로 값을 추가하는 방법은 무엇입니까?

+0

음, 당신은 객체가 엉망이된다. 배열을 원하지 않니? ' "obj1.2": []' – epascarello

+0

어느 값을 추가하고 싶은가? –

+1

정의 된대로 개체가 잘못되었습니다. 실제 코드를 게시하십시오 –

답변

1

이 시도 :

function setDeepValue(obj, value, path) { 
    if(path.length > 1){ 
     var p=path.shift(); 
     if(obj[p]==null || typeof obj[p]!== 'object'){ 
      obj[p] = {}; 
     } 
     setDeepValue(obj[p], value, path); 
    }else{ 
     obj[path[0]] = value; 
    } 
} 

var obj = {}; 
var path = ['obj1', 'obj1.1']; 
setDeepValue(obj, 'test', path); 
console.log(obj); // {"obj1":{"obj1.1":"test"}} 

당신은 그러나 개체 해결하기 위해 필요합니다 : 객체가 값을 사용하지 않고 키를 가질 수 없습니다

var t = { 
    "obj1": { 
     "obj1.1": "test", 
     "obj1.2": { 
      "obj1.1.1": null, // <-- "obj1.1.1" has to have a value. 
      "obj1.1.2": "test" 
     } 
    } 
}; 

을, 그래서 "obj1.1.1"는 값을 가져야합니다 심지어 null 인 경우에도 마찬가지입니다.

+0

대단히 고마워요! –

0

이 객체를 가정하면

var obj = { 
     "obj1" : { 
      "obj1.1" : "", 
      "obj1.2" : { 
      "obj1.1.1" : "", 
      "obj1.1.2" : "" 
      } 
      } 
     } 

var path = ['obj1', 'obj1.1', 'test']; 

알고리즘은 다음

:
var el = obj; 
for(var i = 0; i < path.length-2; i++) { 
    el = el[path[i]]; 
} 
el[path[i]] = path[i+1]; 

또는 함수

function setpath(obj,path) { 
    var el = obj; 
    for(var i = 0; i < path.length-2; i++) { 
     console.log(i+"="+path[i]); 
     el = el[path[i]]; 
    } 
    el[path[i]] = path[i+1]; 
    console.log(el); 
} 

setpath(obj,['obj1', 'obj1.1', 'test']); 
0
var tree = { 
    "obj1": { 
     "obj1.1": "test", 
     "obj1.2": { 
      "obj1.1.1": null, 
      "obj1.1.2": "test" 
     } 
    } 
}; 

var path = ['obj1', 'obj1.1', 'test']; 

'검사'을 설정하는 정적 방법으로

tree[path[0]][path[1]] = path[2]; 

NEWOBJ와 '테스트'를 대체 정적 방법 :

var newObj = { ... }; 
tree[path[0]][path[1]][path[2]] = newObj; 
관련 문제