Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 求多边形的周长_Javascript_Arrays - Fatal编程技术网

Javascript 求多边形的周长

Javascript 求多边形的周长,javascript,arrays,Javascript,Arrays,代码顶部的注释中给出了问题的描述。 我得到的输出是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. */

代码顶部的注释中给出了问题的描述。 我得到的输出是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;
    }
}

for
循环的限制超过数组末尾1


用于(var i=0;iChange
其他答案都是正确的,问题是
i
将从数组的末尾消失一次,这会给您带来问题。这是使用for循环在数组上迭代时可能出现的问题的一个示例;
i
只是与您所使用的数组偶然相关如果我们认为在
i
和数组之间创建的关系与我们在代码中创建的关系不完全相同,则很容易出现问题

出于这个原因,我建议使用类似于
reduce
的方法。您也可以使用
forEach
并跟踪求和,但
reduce
是迄今为止求和的最佳选择,因为它的设计目的是获取可计算的内容并生成单个值

这可能看起来是这样的:

类多边形
{
建造师(侧面)
{
这个边=边;
}
周长()
{
返回此.sides.reduce((上一个,当前)=>上一个+当前,0);
}
}
常数矩形=新多边形([10,20,10,20]);
常数平方=新多边形([10,10,10,10]);
常数五角大楼=新多边形([10,20,30,40,43]);
console.log(rectangle.permiture());
console.log(square.permiture());

console.log(pentage.permiture());
您迭代得太远了:
我更改
数组中的索引从0开始,一直到N-1。因此,正如其他人所说,您应该替换
也是与的重复
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 (var i = 0; i <= this.sides.length; i++)
for (var i = 0; i < this.sides.length; i++)