javascript - 用带条件的数字升序填充数组
问题描述
如何使用以下条件用数字的升序填充数组:
数组中的第一个元素是
let a = 0;
数组元素之和等于
var sum = 10;
数组的长度应该是
var length = 10;
这是我创建的代码:
var length = 10;
var array = [];
var sum = 10; // the sum of all elements in the array should be equal to this
for (let i = 0; i < length; i++) {
let a = 0; // the very first element of array
// Math equations
let last = (sum - (length / 2 * a)) * 2 / length
let dd = (last - a) / (length - 1)
sume = (dd * (i));
array.push(sume);
}
// check to see if array elemements sum is equal to "var sum = 10"
let reducer = (accumulator, currentValue) => accumulator + currentValue;
let sumArray = array.reduce(reducer);
console.log("sumArray: " + sumArray)
console.log(array) // results
但问题不是像这样有整数(它仍然符合我的所有条件):
[0, 0, 0, 0, 1, 1, 1, 2, 2, 3]
但我得到了这些结果:
[0, 0.2222222222222222, 0.4444444444444444, 0.6666666666666666, 0.8888888888888888, 1.1111111111111112, 1.3333333333333333, 1.5555555555555554, 1.7777777777777777, 2]
注意:我在这里计算了最后一项:let last = (sum - length / 2 * a) * 2 / length
第一项始终为 0...
解决方案
您可以对值进行四舍五入。
sume = Math.round(dd * i);
var length = 10;
var array = [];
var sum = 10; // the sum of all elements in the array should be equal to this
for (let i = 0; i < length; i++) {
let a = 0; // the very first element of array
// Math equations
let last = (sum - length / 2 * a) * 2 / length
let dd = (last - a) / (length - 1)
sume = Math.round(dd * i);
array.push(sume);
}
// check to see if array elemements sum is equal to "var sum = 10"
let reducer = (accumulator, currentValue) => accumulator + currentValue;
let sumArray = array.reduce(reducer);
console.log("sumArray: " + sumArray)
console.log(array) // results
一种更短的舍入方法(它可能不适用于所有情况)。
const add = (a, b) => a + b;
function disperse(length, sum) {
var min = 0,
max = sum * 2 / length,
array = Array.from({ length }, (_, i) => Math.round(min + i * max / (length - 1)));
return [array.reduce(add), array.join(', ')];
}
console.log(disperse(10, 10));
console.log(disperse(10, 30));
console.log(disperse(20, 50));
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- angular - 新的 Angular 项目无法正确渲染
- excel - 使用 Excel VBA 从两个列表中构建一个列表
- wordpress - 匹配 htaccess 重定向
- swift - 如何在 SwiftUI 中的 TabView 的 tabItem 上显示徽章编号?
- c++ - Memset 没有填满整个指针数组 c++
- asp.net-core - 如何在 Blazor 服务器端呈现 Javascript?
- python - 如何在特定文本 selenium 中调用操作
- java - @WebFilter 在使用 MockMvc 测试控制器时不起作用
- sql - 如何强制数据库在 Oracle 中使用基于函数的索引
- python-3.x - 熊猫数据框在列中具有重复值