问题的描述在代码顶部的评论中给出。我得到的输出是NAN,而不是周长的整数值
/*
* Implement a Polygon class with the following properties:
* 1. A constructor that takes an array of integer side lengths.
* 2. A 'perimeter' method that returns the sum of the Polygon's side lengths.
*/
class Polygon
{
constructor(sides)
{
this.sides = sides;
}
perimeter()
{
var per = 0;
for (var i = 0; i <= this.sides.length; i++)
{
per += this.sides[i];
}
return per;
}
}
此代码运行以上代码:
const rectangle = new Polygon([10, 20, 10, 20]);
const square = new Polygon([10, 10, 10, 10]);
const pentagon = new Polygon([10, 20, 30, 40, 43]);
console.log(rectangle.perimeter());
console.log(square.perimeter());
console.log(pentagon.perimeter());
<
更改<=
,因此您不会越过sides
数组的界限:
for (var i = 0; i <= this.sides.length; i++)
for:
for (var i = 0; i < this.sides.length; i++)
您可以使用Reled总结您的侧面:
class Polygon {
constructor(sides) {
this.sides = sides;
}
perimeter() {
return this.sides.reduce((sum, side) => sum + side, 0);
}
}
const rectangle = new Polygon([10, 20, 10, 20]);
const square = new Polygon([10, 10, 10, 10]);
const pentagon = new Polygon([10, 20, 30, 40, 43]);
console.log(rectangle.perimeter());
console.log(square.perimeter());
console.log(pentagon.perimeter());
for
循环的极限超过数组末端。
for (var i = 0; i <= this.sides.length; i++)
大小length
的数组将以length - 1
作为最后一个索引。要解决此问题,请使用:
for (var i = 0; i < this.sides.length; i++)
其他答案是正确的,问题是i
将在数组末端脱离一个,这会给您带来问题。这是一个问题的例证,该问题可能是由于使用循环在数组上迭代而引起的。i
仅与您迭代的数组相关,并且很容易遇到我们在i
和数组之间创建的关系的问题我们在代码中创建的。
因此,我建议使用reduce
之类的东西。您也可以使用forEach
并跟踪总和,但是reduce
是迄今为止总和的最佳选择,因为它旨在采用某些东西并产生一个值。
这是看起来的外观:
class Polygon
{
constructor(sides)
{
this.sides = sides;
}
perimeter()
{
return this.sides.reduce((prev, curr) => prev + curr, 0);
}
}
const rectangle = new Polygon([10, 20, 10, 20]);
const square = new Polygon([10, 10, 10, 10]);
const pentagon = new Polygon([10, 20, 30, 40, 43]);
console.log(rectangle.perimeter());
console.log(square.perimeter());
console.log(pentagon.perimeter());