Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

객체로 재귀 문자열 구문 분석 - JavaScript

<시간/>

문자열 배열을 받아 문자열에 해당하는 객체를 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어 -

배열이 -

인 경우
const arr =[ "country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3"]; 

그러면 출력은 다음과 같아야 합니다. -

const 출력 ={ "country":[ {"UK" :{"level" :["1", "2", "3"]}}, {"US" :{"level" :[" 1","2"]}} ]}

조건

str 배열에 저장된 문자열은 정렬되지 않으며 코드는 이에 대해 강력해야 합니다.

문자열은 x.y.x.y... 패턴을 따릅니다. 여기서 x는 해당 배열에 대해 고유하고 y는 변경될 수 있습니다. 제 예시에서 국가와 레벨은 항상 x pos를 나타내는 것과 동일합니다.

str 배열에 저장된 문자열은 길이에 관계없이 재귀적 접근이 필요합니다. 문자열이 길수록 중첩이 깊어집니다.

예시

다음은 코드입니다 -

 const arr =[ "country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3"]; const stringToObject =arr => { const obj ={}; arr.forEach(str => { let curr =obj; let splitted =str.split('.'); let last =splitted.pop(); let beforeLast =splitted.pop(); splitted.forEach( sub => { if(!curr.hasOwnProperty(sub)){ curr[sub] ={}; }; curr =curr[sub]; }); if(!curr[beforeLast]){ curr[beforeLast] =[]; }; curr[beforeLast].push(마지막); }); return obj;};console.log(JSON.stringify(stringToObject(arr), 정의되지 않음, 4));

출력

이것은 콘솔에 다음과 같은 출력을 생성합니다 -

{ "국가":{ "영국":{ "수준":[ "1", "2", "3" ] }, "미국":{ "수준":[ "1" ] } }}