다음과 같은 문자열 리터럴 배열이 있다고 가정합니다. -
const arr = [ "fiat−palio", "fiat−stilo", "fiat−strada", "fiat−uno", "fiat−uno", "gm−corsa", "gm−celta", "ford−fiesta", "volkswagen−gol", "volkswagen−gol", "volkswagen−gol", "volkswagen−voyage" ]
우리는 그러한 문자열 배열 중 하나를 취하는 JavaScript 함수를 작성해야 합니다. 위의 배열에서 모든 항목에는 한 가지 공통점이 있으며(모두 문자열이라는 점 외에) 대시('-')로 구분된 문자열 쌍이 있습니다.
우리 함수는 대시('-) 앞 부분으로 키를 포함하는 개체를 준비하고 원래 배열 내에 있었던 각 문자열의 개수를 포함하는 개체로 해당 값을 준비해야 합니다.
따라서 위 배열의 경우 출력은 다음과 같아야 합니다. -
const output = { "fiat": { "palio": 1, "stilo": 1, "strada": 1, "uno": 2 }, "gm": { "corsa": 1, "celta": 1 }, "ford": { "fiesta": 1 }, "volkswagen": { "gol": 3, "voyage": 1 } };
예시
이에 대한 코드는 -
const arr = [ "fiat−palio", "fiat−stilo", "fiat−strada", "fiat−uno", "fiat−uno", "gm−corsa", "gm−celta", "ford−fiesta", "volkswagen−gol", "volkswagen−gol", "volkswagen−gol", "volkswagen−voyage" ]; const convertToObject = (arr = []) => { let res = arr.reduce((acc, val) => { let pair = val.split('−'); let mark = pair[0]; let model = pair[1]; if(!acc.hasOwnProperty(mark)) { acc[mark] = {}; acc[mark][model] = 1; } else { if(acc[mark].hasOwnProperty(model)) { acc[mark][model] += 1; } else { acc[mark][model] = 1; } } return acc; }, {}) return res; } console.log(convertToObject(arr));
출력
콘솔의 출력은 -
{ fiat: { palio: 1, stilo: 1, strada: 1, uno: 2 }, gm: { corsa: 1, celta: 1 }, ford: { fiesta: 1 }, volkswagen: { gol: 3, voyage: 1 } }