Chúng tôi có một mảng các ký tự Số như thế này -
const numbers = [10,6200,20,20,350,900,26,78,888,10000,78,15000,200,1280,2000,450];
Chúng ta phải viết một hàm nhận một mảng số và một số trong khoảng [0,100], về cơ bản con số này đại diện cho một phần trăm nhất định. Hãy để chúng tôi biểu thị số này bằng x fornow.
Bây giờ chúng ta phải trả về một mảng con gồm n phần tử đầu tiên của mảng ban đầu có tổng giá trị bằng hoặc chỉ nhỏ hơn x% của tổng của tất cả các phần tử mảng.
Lấy một ví dụ đơn giản hơn -
const numbers = [12, 10, 6, 8, 4, 2, 8];
Đối với mảng này, tổng tổng của mảng này là 50 và bây giờ nếu chúng ta cung cấp 25 làm đối số thứ hai (giá trị cho x), thì chúng ta phải trả về n phần tử đầu tiên cộng lại chỉ bằng hoặc ít hơn 25% của 50, thực tế là 12,5.
Vì vậy, trong trường hợp này, một mảng chỉ có phần tử đầu tiên sẽ được trả về vì việc thêm phần tử thứ hai (10) vào 12 sẽ vượt quá giá trị ngưỡng (12,5).
Hãy viết mã cho việc này. Lúc đầu, chúng tôi chỉ cần giảm mảng thành tổng của nó, sau đó trong vòng lặp for sẽ xây dựng một mảng phù hợp với các tiêu chí đã đề cập ở trên -
Ví dụ
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));
Đầu ra
Đầu ra trong bảng điều khiển sẽ là -
[ 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 ]