Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

แยกสมาชิกอาร์เรย์เพื่อสร้างออบเจ็กต์ใน JavaScript

สมมติว่ามีอาร์เรย์ของสตริง literal ดังนี้:

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