เรามีอาร์เรย์ตัวเลขแบบนี้
const numbers = [10,6200,20,20,350,900,26,78,888,10000,78,15000,200,1280,2000,450];
เราควรเขียนฟังก์ชันที่รับอาร์เรย์ตัวเลขและตัวเลขระหว่าง [0, 100] โดยตัวเลขนี้แทนเปอร์เซ็นต์หนึ่ง ให้แทนตัวเลขนี้ด้วย x
ตอนนี้เราต้องคืนค่า subarray ของ n องค์ประกอบแรกของอาร์เรย์ต้นฉบับที่บวกรวมกันเท่ากับหรือน้อยกว่า x% ของผลรวมทั้งหมดขององค์ประกฏอาร์เรย์
ตัวอย่างง่ายกว่า −
const numbers = [12, 10, 6, 8, 4, 2, 8];
สำหรับอาร์เรย์นี้ผลรวมรวมคือ 50 และตอนนี้ถ้าเราให้ 25 เป็นอาร์กิวเมนต์ที่สอง (ค่าของ x) เราต้องคืนค่าองค์ประกอบแรก n ตัวที่บวกรวมได้เท่ากับหรือน้อยกว่า 25% ของ 50 ซึ่งคือ 12.5
ดังนั้นในกรณีนี้ ควรคืนค่าอาร์เรย์ที่มีแค่องค์ประกอบแรก เพราะการบวกองค์ประกอบที่สอง (10) เข้ากับ 12 จะเกินค่าเกณฑ์ (12.5)
มาเขียนโค้ดสำหรับนี้ ตอนแรกเรา reduce อาร์เรย์เป็นผลรวม แล้วใน for loop เราสร้างอาร์เรย์ที่ตรงเกณฑ์ข้างต้น −
ตัวอย่าง
const numbers = [10,6200,20,20,350,900,26,78,888,10000,78,15000,200,1280,2000,450]; const findPercent = (arr, percent) => { const sum = arr.reduce((acc, val) => acc+val); const part = []; let curr = 0; for(let i = 0; i < arr.length; i++){ curr += arr[i]; if(curr <= (sum*percent)/100){ part.push(arr[i]); } else { break; }; }; return part; }; console.log(findPercent(numbers, 35)); console.log(findPercent(numbers, 5)); console.log(findPercent(numbers, 65)); console.log(findPercent(numbers, 95));ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้
[ 10, 6200, 20, 20, 350, 900, 26, 78, 888 ] [ 10 ] [ 10, 6200, 20, 20, 350, 900, 26, 78, 888, 10000, 78 ] [ 10, 6200, 20, 20, 350, 900, 26, 78, 888, 10000, 78, 15000, 200, 1280 ]