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

หาส่วนของอาร์เรย์ตัวเลขโดยเปอร์เซ็นต์ใน JavaScript


เรามีอาร์เรย์ตัวเลขแบบนี้

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 ]