JavaScript:获取数组中的平均对象?

Mys*_*ake 7 javascript arrays average

我试图想办法使这个代码变得简单,使用最少量的循环和变量,但我遇到了麻烦.

我希望根据'value'得到数组'numbers'中的平均对象.我觉得必须有一种数学方法来获得平均值,而不是在另一个循环中找到最接近的平均值.

目前我有这个烂摊子:

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);
Run Code Online (Sandbox Code Playgroud)

我需要检索对象,因为它包含我需要使用的其他信息.

任何帮助将非常感谢!

Nin*_*olz 7

至少你需要两个循环来获取平均值和最接近的项目,因为你需要在第一次运行中访问所有项目而你没有可能提前存储哪个项目具有最接近的值.

您可以先获得平均值,然后使用该对象减少最接近的值.

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);
Run Code Online (Sandbox Code Playgroud)