เรามีอาร์เรย์ของอาร์เรย์ แต่ละอาร์เรย์ย่อยประกอบด้วยสององค์ประกอบ อย่างแรกคือสตริง ชื่อบุคคลในกรณีนี้ และที่สองคือจำนวนเต็ม สิ่งที่เราต้องทำคือรวมอาร์เรย์ย่อยทั้งหมดที่มีองค์ประกอบแรกเหมือนกันและองค์ประกอบที่สอง ควรเป็นผลรวมขององค์ประกอบที่สองของอาร์เรย์ย่อยทั่วไป
ต่อไปนี้เป็นตัวอย่างอาร์เรย์ของเรา -
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 -
โดยจะวนซ้ำบนอาร์เรย์ จับคู่ชื่อเป็นคีย์และ prop เป็นค่าในออบเจ็กต์ ทำให้คีย์ sureduplicate ถูกรวมเข้าด้วยกัน และสุดท้ายอ็อบเจ็กต์จะถูกแปลงเป็นอาร์เรย์ของอาร์เรย์และส่งกลับ
ความซับซ้อนของเวลาของฟังก์ชันนี้คือ O(2n) ซึ่งมักจะปัดเศษเป็น O(n) และความซับซ้อนของพื้นที่คือ O(n) เช่นกัน