เรามีอาร์เรย์ของอาร์เรย์ แต่ละซับอาร์เรย์มีสองสมาชิกพอดี ตัวแรกเป็นสตริง (ชื่อคนในที่นี้) ตัวที่สองเป็นจำนวนเต็ม เราต้องรวมซับอาร์เรย์ที่มีสมาชิกตัวแรกเหมือนกัน และสมาชิกตัวที่สองควรเป็นผลรวมของสมาชิกตัวที่สองของซับอาร์เรย์ที่ซ้ำกัน
อาร์เรย์ตัวอย่าง
const example = [ ['first', 12], ['second', 19], ['first', 7] ];
ควรแปลงเป็น
const example = [ ['first', 19], ['second', 19] ];
เขียนฟังก์ชัน combineArray() รับอาร์เรย์และคืนอาร์เรย์ที่รวมแล้ว
ตัวอย่าง
const people = [
['Ram', 21],
['Mohan', 33],
['Vikram', 25],
['Mike', 29],
['Mohan', 41],
['Vikram', 26]
];
const combineArray = (people) => {
const map = {};
for(const index in people){
const name = people[index][0];
const prop = people[index][1];
if(map[name]){
map[name] += prop;
}else{
map[name] = prop;
}
}
return Object.keys(map).map(key => [key, map[key]]);
}
console.log(combineArray(people));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น
[ ['Ram', 21], ['Mohan', 74], ['Vikram', 51], ['Mike', 29] ]
การทำงานของฟังก์ชัน combineArray
มันวนลูปผ่านอาร์เรย์ แมปชื่อเป็น key และค่าเป็น value ในอ็อบเจกต์ ทำให้ key ซ้ำกันถูกรวมค่าเข้าด้วยกัน และสุดท้ายแปลงอ็อบเจกต์กลับเป็นอาร์เรย์ของอาร์เรย์แล้วคืนค่า
ความซับซ้อนด้านเวลาคือ O(2n) ซึ่งมักปัดเป็น O(n) และความซับซ้อนด้านพื้นที่คือ O(n) เช่นกัน