我试图想出一种方法来使代码变得简单,使用最少的循环和变量,但我遇到了麻烦。
我想根据“值”获取数组“数字”中的平均对象。我觉得必须有一种数学方法来获得平均值,而无需在另一个循环中找到最接近的平均值。
目前我有这个混乱:
var numbers = [
{ value: 41 },
{ value: 19 },
{ value: 51 },
{ value: 31 },
{ value: 11 }
];
// Find average:
var sum = 0;
for (var i = 0; i < numbers.length; i++) {
sum += numbers[i].value;
}
var average = sum / numbers.length;
// Find closest object to average:
var match, difference;
for (var j = 0; j < numbers.length; j++) {
const diff = Math.abs(average - numbers[j].value);
if (difference === undefined || diff < difference) {
difference = diff;
match = numbers[j];
}
}
// Print junk:
console.log("AVERAGE NUMBER: " + average);
console.log("CLOSEST OBJECT: " + match);
console.log("CLOSEST NUMBER: " + match.value);
我需要检索该对象,因为它包含我需要使用的其他信息。
任何帮助将不胜感激!
至少您需要两个循环来获取平均值和最接近的项目,因为您需要在第一次运行中访问所有项目,并且您无法提前存储哪个项目具有最接近的值。
您可以首先获得平均值,然后减少与对象最接近的值。
var numbers = [{ value: 41 }, { value: 19 }, { value: 51 }, { value: 31 }, { value: 11 }, { value: 30 }],
average = numbers.reduce((sum, { value }) => sum + value, 0) / numbers.length,
closest = numbers.reduce((a, b) =>
Math.abs(average - a.value) <= Math.abs(average - b.value)
? a
: b
);
console.log(average);
console.log(closest);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)