将数组从许多值简化为更少
Simplify array from many values to fewer
我有一个包含很多数字 (165) 的数组,我想 'simplify' 将数组 'simplify' 减少到更少的数字 (50)。减少的数组应该仍然代表 165 个原始数字。
例如:
如果我有这个包含 8 个值的数组 [2, 4, 3, 8, 1, 4, 9, 3]
并要求将其减少到 4 个值,我想接收这个数组 [3, 5.5, 2.5, 6]
目前我有一个函数,当减少的数字和原始数字可以相除时(如 8 和 4),但是当我尝试使用它时,假设 165 个值应该简化为 50 个值,它 returns我54个值:
const array = [28, 71, 64, 116, 128, 8, 78, 172, 142, 96, 12 ... 165 values]
const valuesToSum = Math.floor(array.length / 50); // 50 is the wanted array length
for (let i = 0; i < array.length; i++) {
if (i % valuesToSum !== 0 || i === 0) {
sum += array[i];
} else {
returnArray.push(sum / valuesToSum);
sum = 0;
}
}
return returnArray;
最后这应该是一个 JavaScript 函数,但如果有人能在数学层面上向我解释一下,那将对我有很大帮助。
为了获得您想要的确切组数,您不能对要分组的元素数进行四舍五入。例如,如果你想从 165 减少到 50,一些组将有 3 个元素,一些将有 4 个。
为此,请使用嵌套循环。外循环按组的大小递增,而内循环在组内递增 1。将此内部索引转换为数组索引时会发生舍入。
const array = [28, 71, 64, 116, 128, 8, 78, 172, 142, 96, 12]
function reduceArray(array, newSize) {
const returnArray = [];
const valuesToSum = array.length / newSize;
for (let i = 0; i < array.length; i += valuesToSum) {
let sum = 0;
let j;
let start_i = Math.floor(i);
for (j = start_i; j < Math.min(start_i + valuesToSum, array.length); j++) {
sum += array[j];
}
returnArray.push(sum/(j - start_i));
}
return returnArray;
}
console.log(reduceArray(array, 4));
const bigArray = [];
for (let i = 0; i < 165; i++) {
bigArray.push(Math.floor(Math.random() * 200));
}
let result = reduceArray(bigArray, 50);
console.log(result.length);
console.log(result);
我有一个包含很多数字 (165) 的数组,我想 'simplify' 将数组 'simplify' 减少到更少的数字 (50)。减少的数组应该仍然代表 165 个原始数字。
例如:
如果我有这个包含 8 个值的数组 [2, 4, 3, 8, 1, 4, 9, 3]
并要求将其减少到 4 个值,我想接收这个数组 [3, 5.5, 2.5, 6]
目前我有一个函数,当减少的数字和原始数字可以相除时(如 8 和 4),但是当我尝试使用它时,假设 165 个值应该简化为 50 个值,它 returns我54个值:
const array = [28, 71, 64, 116, 128, 8, 78, 172, 142, 96, 12 ... 165 values]
const valuesToSum = Math.floor(array.length / 50); // 50 is the wanted array length
for (let i = 0; i < array.length; i++) {
if (i % valuesToSum !== 0 || i === 0) {
sum += array[i];
} else {
returnArray.push(sum / valuesToSum);
sum = 0;
}
}
return returnArray;
最后这应该是一个 JavaScript 函数,但如果有人能在数学层面上向我解释一下,那将对我有很大帮助。
为了获得您想要的确切组数,您不能对要分组的元素数进行四舍五入。例如,如果你想从 165 减少到 50,一些组将有 3 个元素,一些将有 4 个。
为此,请使用嵌套循环。外循环按组的大小递增,而内循环在组内递增 1。将此内部索引转换为数组索引时会发生舍入。
const array = [28, 71, 64, 116, 128, 8, 78, 172, 142, 96, 12]
function reduceArray(array, newSize) {
const returnArray = [];
const valuesToSum = array.length / newSize;
for (let i = 0; i < array.length; i += valuesToSum) {
let sum = 0;
let j;
let start_i = Math.floor(i);
for (j = start_i; j < Math.min(start_i + valuesToSum, array.length); j++) {
sum += array[j];
}
returnArray.push(sum/(j - start_i));
}
return returnArray;
}
console.log(reduceArray(array, 4));
const bigArray = [];
for (let i = 0; i < 165; i++) {
bigArray.push(Math.floor(Math.random() * 200));
}
let result = reduceArray(bigArray, 50);
console.log(result.length);
console.log(result);