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