使用减少从数组取平均值.将您自己的方法添加到 Array 对象,以便以下代码正常工作.3种方法



我正在尝试解决一项任务。我知道这是非常基本的,因为我刚刚开始并为训练营的技术面试做准备。如果有人能帮助我理解一些原因,我将不胜感激。 下面的代码应该可以添加我自己的方法。这是一个初学者练习,以获得平均值。我本可以用 for 循环来完成,但我正在尝试实现 reduce 方法。

这是给定的代码


var arr = [1, 2, 3, 4, 5];
var avg = arr.average();
console.log(avg);

我已经能够使用以下代码获得平均值。


var arr = [1, 2, 3, 4, 5];
function average() {
const accPlusCur =(acc,cur) => acc + cur;
const sumOfAll = arr.reduce(accPlusCur);
return sumOfAll / arr.length;
};
console.log(average());
// => 3

问题是我没有真正使用给定的代码。所以我以另一种方式编写它,以尝试拥有一个可以应用于任何数组而不仅仅是这个特定数组的函数。但它不起作用。


var arr = [1, 2, 3, 4, 5];
function average(arrayName) {
const accPlusCur = (acc,cur) {return acc + cur}, 0;
const sumOfAll = arrayName.reduce(accPlusCur);
return sumOfAll / arrayName.length;
};
const avg = average();
console.log(avg);

在线给出的解决方案如下。虽然我不太明白。


Array.prototype.average = function() {
var sum = this.reduce(function(prev, cur) { return prev + cur; });
return sum / this.length;
}
var arr = [1, 2, 3, 4, 5];
var avg = arr.average();
console.log(avg); // => 3

有人可以帮我吗?为什么我的第二次尝试不像我的第一个选项那样有效。 这个原型方法和"这个"的固定使用是怎么回事。Whi 是原型之前的数组词吗?

在Javascript中,对象(通常(有一个内部原型。属性上可用的任何属性或方法在对象上也可用。例如,数组在原型上有一个.join方法:Array.prototype.join。因此,您可以在任何数组上调用.join,例如

myArray.join('')

尽管事实上join实际上不是数组的属性 - 它是myArray的内部原型的属性。

同样,通过在原型上放置一个函数,该函数可以被任何实例调用。

在原型方法中时,this引用已调用该方法的对象。所以,例如,与

myArray.join('')

当调用.join时,它里面this指的是myArray

在解决方案中,代码

var sum = this.reduce(function(prev, cur) { return prev + cur; });

计算调用该方法的数组的总和。由于该方法在Array.prototype任何数组都可以访问该方法。

代码的问题:

var arr = [1, 2, 3, 4, 5];
function average(arrayName) {
const accPlusCur = (acc,cur) {return acc + cur}, 0;
const sumOfAll = arrayName.reduce(accPlusCur);
return sumOfAll / arrayName.length;
};
const avg = average();
console.log(avg);

average接受一个参数(你想要从中获取平均值的数组(,但你没有传递它一个参数。

此外,累加器的初始值应该是您传递给.reduce第二个参数:

var arr = [1, 2, 3, 4, 5];
function average(arrayName) {
const accPlusCur = (acc,cur) => acc + cur;
const sumOfAll = arrayName.reduce(accPlusCur, 0);
return sumOfAll / arrayName.length;
}
const avg = average(arr);
console.log(avg);

感谢您抽出宝贵时间提供帮助。我真的很感激。 所以现在我明白了 .this 至于原型给出的答案,如果我理解正确,以下原型函数将是一种声明一个函数

Array.prototype.average = function() {
// calculate sum
var sum = this.reduce(function(prev, cur) { return prev + cur; });
// return sum divided by number of elements
return sum / this.length;
}

之后它被称为

var avg = arr.average();

这是对的吗?

至于我正在尝试的第二种方法,在检查这个答案之前,我意识到我一分钟前做错了什么。现在这段代码工作得很好。


const arr = [1, 2, 3, 4, 5];
function average(x) {
const sumOfAll = x.reduce((acc, cur) => acc + cur, 0);
return sumOfAll / x.length;
};
const averageVariable = average(arr); 
console.log(averageVariable);

再次,非常感谢您的帮助和花时间帮助乞丐。有一天,当我在这方面做得更好时,我会做同样的事情。

最新更新