2016-08-01 3 views
0

Я занимаюсь ремеслом и смотрел на петли и т. Д., А затем подумал, что есть, вероятно, более быстрый способ сделать это. Тогда я заблудился в lodash документах ...Замените именованный объект на свойства этого объекта

Во всяком случае, я хочу работать над следующим объектном

{ 
    stuff: { 
    thing1: 'value1', 
    thing2: 'value2', 
    thing3: 'value3' 
    }, 
    something: 'value4' 
} 

й возвратом:

{ 
    thing1: 'value1', 
    thing2: 'value2', 
    thing3: 'value3', 
    something: 'value4' 
} 

То есть, я хочу устраните уровень stuff и получите все как братья и сестры. Говоря легко, я имею в виду. Я пробовал _.flatten и ._flattenDepth, но они работают только с массивами (возвращает пустой массив).

Thanks

ответ

1

Я думаю, что ваша лучшая/единственная ставка - это цикл.

function flattenObject(obj, res) { 
    res = res ? res : {}; 
    Object.keys(obj).forEach(function(d) { 
     if (typeof obj[d] === 'object') return flattenObject(obj[d], res); 
     res[d] = obj[d]; 
    }); 

    return res; 
} 


console.log(flattenObject(a)); 
+0

Хорошо, спасибо! В чем проблема? – heydon

+1

и он будет работать на любой глубине @heydon – baao

+1

res - это результирующий объект. В первой строке функции я просто проверяю, прошел ли res (уже объект), а если нет, я создаю новый пустой. @heydon – baao