Obtener un valor anidado de objetos de una matriz de propiedades anidadas

Tengo una situación en la que necesito comprimir dos Objetos juntos, conservando ambos valores. Puedo recorrer ambos objetos y construir una matriz de todas las claves.

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

Pasando en lo siguiente:

    traverse({
        'a': {
            'b': 'hello world',
            'b1': 'hello world 1',
            'c': {
                'd': 'dello'
            }
        }
    })

Me devolverá

[a]
[a,b]
[a,b1]
[a,c]
[a, c, d]

Así que ahora tengo una matriz de propiedades anidadas en un objeto. ¿Cómo puedo acceder esencialmente a obj [[a, c, d]]? Sé que puedo resolver el problema a través de eval pero no puedo confiar en el contenido.

eval('window.' + ['a','c','d'].join('.')); 

Si puedo recorrer esa matriz y verificar si la propiedad existe en ambos, construya un nuevo objeto de los valores combinados "comprimidos".

Respuestas a la pregunta(1)

Su respuesta a la pregunta