拆分、比较并输出数组中最合适的值
Splitting, comparing and outputting the most appropriate value in the array
我有一个函数可以将一个大数组拆分成目标块。
function chunkArray(ls, k, t) {
let outputArr = [];
for (let i = 0; i < ls.length; i += k) {
outputArr.push(ls.slice(i, k + i));
}
return outputArr;
}
我需要修改函数,让它首先对每个输出数组求和,然后将结果与目标进行比较,并输出接近目标的数组的总和。
const ls = [51, 56, 58, 59, 61, 63, 68, 70, 72];
chunkArray(ls, 3, 182);
=> arr1 = [51, 56, 58]; => 165
=> arr2 = [59, 61, 63]; => 183
=> arr3 = [68, 70, 72]; => 210
=> 183
请告知如何正确设计逻辑以及最适合此任务的方法。
您可以对每个想要的 k
元素求和,然后比较最后和实际总和的绝对增量。
function chunkArray(ls, k, t) {
let result = 0,
i = 0;
while (i < ls.length) {
let sub = 0;
for (let j = 0; j < k; j++) sub += ls[i + j] || 0;
if (Math.abs(result - t) > Math.abs(sub - t)) result = sub;
i += k;
}
return result;
}
const ls = [51, 56, 58, 59, 61, 63, 68, 70, 72];
console.log(chunkArray(ls, 3, 182)); // 183
我有一个函数可以将一个大数组拆分成目标块。
function chunkArray(ls, k, t) {
let outputArr = [];
for (let i = 0; i < ls.length; i += k) {
outputArr.push(ls.slice(i, k + i));
}
return outputArr;
}
我需要修改函数,让它首先对每个输出数组求和,然后将结果与目标进行比较,并输出接近目标的数组的总和。
const ls = [51, 56, 58, 59, 61, 63, 68, 70, 72];
chunkArray(ls, 3, 182);
=> arr1 = [51, 56, 58]; => 165
=> arr2 = [59, 61, 63]; => 183
=> arr3 = [68, 70, 72]; => 210
=> 183
请告知如何正确设计逻辑以及最适合此任务的方法。
您可以对每个想要的 k
元素求和,然后比较最后和实际总和的绝对增量。
function chunkArray(ls, k, t) {
let result = 0,
i = 0;
while (i < ls.length) {
let sub = 0;
for (let j = 0; j < k; j++) sub += ls[i + j] || 0;
if (Math.abs(result - t) > Math.abs(sub - t)) result = sub;
i += k;
}
return result;
}
const ls = [51, 56, 58, 59, 61, 63, 68, 70, 72];
console.log(chunkArray(ls, 3, 182)); // 183