Computer >> Máy Tính >  >> Lập trình >> Javascript

Tách các mục nhập mảng để tạo đối tượng trong JavaScript

Giả sử, chúng ta có một mảng các ký tự chuỗi như thế này -

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"
]

Chúng tôi được yêu cầu viết một hàm JavaScript có trong một mảng chuỗi như vậy. Trong mảng trên, tất cả các mục nhập đều có một điểm chung (ngoài tất cả đều là một chuỗi), chúng đều có một cặp chuỗi được phân tách bằng dấu gạch ngang ('-').

Hàm của chúng ta nên chuẩn bị một đối tượng chứa các khóa làm phần trước dấu gạch ngang ('-) và các giá trị của chúng dưới dạng các đối tượng chứa số lượng mỗi chuỗi mà chúng có trong mảng ban đầu.

Do đó, đối với mảng trên, đầu ra sẽ như thế này -

const output = {
   "fiat": {
      "palio": 1,
      "stilo": 1,
      "strada": 1,
      "uno": 2
   },
   "gm": {
      "corsa": 1,
      "celta": 1
   },
   "ford": {
      "fiesta": 1
   },
   "volkswagen": {
      "gol": 3,
      "voyage": 1
   }
};

Ví dụ

Mã cho điều này sẽ là -

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));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

{
   fiat: { palio: 1, stilo: 1, strada: 1, uno: 2 },
   gm: { corsa: 1, celta: 1 },
   ford: { fiesta: 1 },
   volkswagen: { gol: 3, voyage: 1 }
}