두 값을 모두 유지하면서 두 개체를 압축해야하는 경우가 있습니다. 두 객체를 반복하고 모든 키 배열을 만들 수 있습니다.중첩 된 속성의 배열에서 개체 중첩 값 가져 오기
var traverse = function (obj, chain) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
var tempChain = [].concat(chain || []);
tempChain.push(prop);
if (typeof obj[prop] === 'object') {
traverse(obj[prop], tempChain);
}
console.log(tempChain);
}
}
};
다음에 전달 :
traverse({
'a': {
'b': 'hello world',
'b1': 'hello world 1',
'c': {
'd': 'dello'
}
}
})
저를 반환합니다
[a]
[a,b]
[a,b1]
[a,c]
[a, c, d]
그래서 지금은 객체의 중첩 된 속성의 배열을 가지고있다. 본질적으로 obj [[a, c, d]]에 어떻게 접근 할 수 있습니까? eval을 통해 문제를 해결할 수 있지만 콘텐츠를 신뢰할 수는 없다는 것을 알고 있습니다.
eval('window.' + ['a','c','d'].join('.'));
내가 그 배열을 통해 루프를 할 수 있고 값 조합 '압축'의 새로운 객체를 속성이 둘 다에있는 경우 다음을 참조 구축 확인합니다.
'창 == obj', 그 어쨌든 작동하지 않을 것입니다. 하지만 네, 간단한 루프를 사용할 수 있습니다. – Bergi
[중복 된 항목 중] (http://stackoverflow.com/a/14397052/1048572)을 확인하십시오. 배열이 이미 있으므로'.split (".")'을 생략하십시오 – Bergi
이것은 일종의 것으로 생각합니다. [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). 'zip'은 정확히 무엇을하기로되어 있으며, 왜 그 속성 체인이 필요한가요? – Bergi