使用Javascript的范围总和

时间:2016-04-19 12:18:10

标签: javascript

我希望用输出执行一个程序:

console.log(range(1, 10));  
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
console.log(range(5, 2, -1));  
// → [5, 4, 3, 2]  
console.log(sum(range(1, 10)));  
// → 55  

我收到array.length的错误。请找到以下代码:

var array = [];

function range (arr){  
    var lower = Math.min(arr[0],arr[1]);    
    var upper = Math.max(arr[0],arr[1]);  

    for (var i=lower;i<=upper;i++){  
        array.push(i);  
    }  
}  

function sum(array){  
    for(var i=0;i < array.length;i++){  
        var total = total+array[i];  
    }  
}  

console.log(sum(range(1, 10)));  

我处于初级水平,请帮忙。 感谢。

9 个答案:

答案 0 :(得分:2)

  1. 调用您定义的范围函数时需要传递一个数组range([1, 10])

  2. 您需要重写和函数

  3. 作为旁注,有更有效的方法可以计算一系列元素的总和而无需迭代它们。

    function sum_of_range(start, end) {
        return end * (end + 1) / 2 - start * (start + 1) / 2;
    }
    

    编辑:

    这是一个工作和函数

    function sum(array) {
        var accumulator = 0;
        for (var i = 0; i < array.length; ++i)
            accumulator += array[i];
        return accumulator;
    }
    

答案 1 :(得分:2)

这里有一些问题:

1。)你没有在range函数中返回任何内容。您需要返回填充的数组。

2。)你没有在sum函数调用中正确传递数组。

3。)您在sum函数调用中没有返回任何内容。

在不返回任何值的情况下,您不能让代码块与彼此一起使用

var array = [];

function range (arr){  
    var lower = Math.min(arr[0],arr[1]);    
    var upper = Math.max(arr[0],arr[1]);  

    for (var i=lower;i<=upper;i++){  
        array.push(i);  
    }
    return array; // return the array to be used in the sum function
}  

function sum(array){  
    var total = 0; // need to create a variable outside the loop scope
    for(var i in array){  
       total = total+array[i];  
    }
    return total;
}  

console.log(sum(range([1,10]))); // pass the array correctly 

请注意,您需要在total函数中将for-loop变量设置在sum范围之外。这样你就可以返回最终值。否则,它将返回undefined

请参阅小提琴:https://jsfiddle.net/udyhb95a/

答案 2 :(得分:1)

您需要修改sum&amp; range功能

function range (){
    var array = []; 
    var lower = Math.min.apply(null, arguments);    
    var upper = Math.max.apply(null, arguments);    

    for (var i=lower;i<=upper;i++){  
        array.push(i);  
    }
    return array;  
} 

function sum(array){  
    return  array.reduce((x,y)=>x+y,0);
} 

console.log(range(1, 10)); 
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1)); //if we are considering min & max from params
// [-1, 0, 1, 2, 3, 4, 5]
console.log(sum(range(1, 10)));
// 55

答案 3 :(得分:1)

在这里,您将一个参数声明为数组

function range (arr){ 
      ...

但是你在这里调用一个带有两个参数的函数数字

console.log(range(1, 10)); 

使用此通话功能

console.log(range([1, 10])); 

并且使用for..in数组

for(var i in array){ it doesn't work as you expect 

使用forEach功能或计划for循环

您在sum功能

中也有一些错误

见下面的工作示例:

function range(arr) {
    var array = [];
    var lower = Math.min(arr[0], arr[1]);
    var upper = Math.max(arr[0], arr[1]);

    for (var i = lower; i <= upper; i++) {
        array.push(i);
    }
    return array;
}

function sum(array) {
    var total = 0;
    for (var i  = 0; i < array.length; i++) {
        total = total + array[i];
    }
    return total;
}

document.write('range ' + range([1, 10]) + '<br>');
document.write('sum ' + sum(range([1, 10])));

答案 4 :(得分:0)

你好亲爱的现在检查一下。

                var array = [];

                function range(arr, arr1) {
                    var lower = Math.min(arr);
                    var upper = Math.max(arr1);
                    for (var i = lower; i <= upper; i++) {
                        array.push(i);
                    }
                }

                function sum() {
                    var total = 0;
                    for (var i = 0; i < array.length; i++) {
                        total = total + array[i];
                    }
                    return total;
                }
                console.log(sum(range(1, 10)));

答案 5 :(得分:0)

这是Eloquent JavaScript

中数据结构章节末尾问题的正确答案
function range(start, end, step) {
  let arr = []; //declare an empty array
  var step = step || 1;//tests to see if step was supplied, otherwise it's 1
  if(start < end) 
  {
    for(let i = start; i <= end; i += step)
    {
      arr.push(i);
    }
  }
  else 
  {
    for(let i = start; i >= end; i += step)
    {
      arr.push(i);
    }
  }
  return arr;
}
function sum(array) {
  let total = 0;
  for(let i = 0; i < array.length; i++) 
  { 
    total += array[i];
  }
  return total;
}

console.log(range(1, 10));
// → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
console.log(range(5, 2, -1));
// → [5, 4, 3, 2]
console.log(sum(range(1,10)));
// → 55

答案 6 :(得分:0)

此解决方案考虑了输入一个预期不会为正/负的步骤,即范围从1到5,我们希望该步骤为正,但是如果用户以某种方式输入了否定步骤,则为空数组就会发生。

如果期望减少数组,但步长大于0,则浏览器实际上挂在相反的位置。

'use strict';

function range(start, end, step = 1){
    let output = [];

    if (start > end){
        // Sanity check, all steps if expected to go down should be negative
        if (step > 0){
            step = -step;
        }

        for (;start >= end; start += step){
            console.log(start);
            output.push(start);
        }
    }
    else{
        // Likewise, as all steps should be positive
        if (step < 0){
            step = -step;
        }

        for (;start <= end; start += step){
            output.push(start);
        }
    }
    return output;
}

function sum(arr){
    let output = 0;
    for (let i of arr){
        output += i;
    }
    return output;
}

console.log(range(1, 5, 1));
// → [1, 2, 3, 4, 5]

console.log(range(5, 1, -1));
// → [5, 4, 3, 2, 1]

// Notice this one step is a positive, but this is handled (original solution returned empty array)
console.log(range(5, 1, 1));
// → [5, 4, 3, 2, 1]

console.log(sum(range(1,10)));
// → 55

对此的一种改进是对数组使用reduce函数求和而不是for循环,即:

function sum(array){  
    return array.reduce((x,y)=>x+y,0);
} 

答案 7 :(得分:0)

对于像我以后发现的人来说,这是一种编写range函数的方法,因此您可以按照原始问题中的输入来传递输入:

console.log(sum(range(1, 10)));

…和一个清理过的sum函数类似于A. Sharma's answer中的函数:

function range(lower, upper) {
  let array = []
  for (let i = lower; i <= upper; i++) {
    array.push(i);
  }
  return array;
}

function sum(array) {
  let total = 0;
  for (let i in array) {
    total = total + array[i];
  }
  return total;
}

console.log(sum(range(1, 10)));

也值得一提:

答案 8 :(得分:0)

这是我所拥有的最佳解决方案

function range(x,y){
    var arr = [];
    for(x;x<=y;x++){
        arr.push(x);
    };
    return arr;
};

function sum(array){
    return array.reduce((a,b) => a + b, 0);
};

console.log(sum(range(1,10)));