2016-08-01 3 views
0

저는 루프를 찾아보고 있었는데, 이렇게하는 것이 더 빠른 방법이라고 생각했습니다.명명 된 개체를 해당 개체의 속성으로 바꿉니다.

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

, 내가 원하는 : 그럼 난 어쨌든

... lodash의 문서에 열중하고 있었다, 나는 다음과 같은 객체 -

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

- 그리고 복귀를 통해 실행하려면 stuff 레벨을 제거하고 모든 것을 형제로 삼으십시오. 쉽고 간결한 방식으로, 나는 의미한다. 나는 _.flatten._flattenDepth을 시도했으나 배열로만 작동합니다 (빈 배열을 반환합니다).

감사합니다.

답변

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

관련 문제