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

JavaScript에서 객체를 형성하기 위해 배열 항목 분할

<시간/>

다음과 같은 문자열 리터럴 배열이 있다고 가정합니다. -

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