我在努力解决一项任务。我知道这是非常基本的,因为我才刚开始学习,准备参加一个训练营的技术面试。如果有人能帮我理解一些原因,我会非常感激的。下面的代码应该可以添加我自己的方法。这是一个初学者的锻炼,以获得平均水平。我本可以使用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
有人能帮帮我吗?为什么我第二次尝试不像我的第一个选择那样工作。这个原型方法的特点是什么,以及“这个”的优点。在原型之前,数组字是什么?
发布于 2019-10-14 03:52:37
在Javascript中,对象(通常)有一个内部原型。属性上可用的任何属性或方法也可以在对象上使用。例如,数组在prototype上有一个.join
方法:Array.prototype.join
。因此,您可以在任何数组上调用.join
,例如
myArray.join('')
尽管join
实际上不是数组的属性,但它是myArray
内部原型的属性。
类似地,通过在原型上放置一个函数,任何实例都可以调用该函数。
在prototype方法中,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);
发布于 2019-10-14 04:22:16
谢谢你抽出时间来帮忙。我真的很感激。所以现在我理解了.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);
再次,非常感谢你的帮助和奉献时间来帮助乞丐。总有一天我会做同样的事,等我做得更好。
https://stackoverflow.com/questions/58369867
复制相似问题