У меня есть ситуация, когда мне нужно закрепить два объекта вместе, сохраняя оба значения. Я могу перебирать оба объекта и строить массив всех ключей.Получение вложенного значения объектов из массива вложенных свойств
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