2016-03-02 40 views
0

我正在尝试创建一个总和函数。当我通过两个不同的数组(具有相同的值)运行它时,它给了我不同的结果。我无法确定我做错了什么。看起来,当我使用'范围'函数生成数组时,它循环了两次。如何创建一个适当的总和功能?

var myArr = []; 
 
var tempArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 

 

 
function range(start, end) { 
 
    for (i = start; i <= end; i++) { 
 
    myArr.push(start); 
 
    start = start + 1; 
 
    } 
 
    return myArr; 
 

 
} 
 

 
function sum(arr) { 
 
    var sumArr = 0; 
 
    for (i = 0; i < arr.length; i++) { 
 
    sumArr = sumArr + arr[i]; 
 
    //console.log(sumArr); 
 
    } 
 
    return sumArr; 
 
} 
 

 

 
console.log(range(1, 10)); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 
 
console.log(tempArr); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] \t 
 

 

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

任何帮助,将不胜感激。谢谢!

+0

'范围(1,10)''返回数组[20]'。你必须在'range'函数中声明'var myArr = [];'。 –

+0

'range()'和'sum()'函数有更简洁的选择 – RomanPerekhrest

回答

4

原因是var myArr = [];是一个全局变量。因此,在第一次控制台尝试中推送的元素将一直存在,直到它们被清除。您可以改用函数中的局部变量。

var tempArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
 

 

 
function range(start, end) { 
 
    var myArr = []; 
 
    for (i = start; i <= end; i++) { 
 
    myArr.push(start); 
 
    start = start + 1; 
 
    } 
 
    return myArr; 
 
} 
 

 
function sum(arr) { 
 
    var sumArr = 0; 
 
    for (i = 0; i < arr.length; i++) { 
 
    sumArr = sumArr + arr[i]; 
 
    //console.log(sumArr); 
 
    } 
 
    return sumArr; 
 
} 
 

 

 
console.log(range(1, 10)); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] 
 
console.log(tempArr); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] \t 
 

 

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

+0

Order * matter *当你测试东西时。如果你不明白为什么某些东西没有返回它应该的东西,那么你应该消除除了测试它的必要条件之外的所有东西。在这种情况下,你(@fokusfocus)会有所不同。 – Neil

+0

@Rejith:好吧,我现在明白了。对不起,这一切都有点新意,但你的解释清楚了事情! – fokusfocus

0

使用lodash

可以使用._sum功能。

var tempArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
sum = _.sum(tempArr) 

如果您想使用它,请不要忘记添加库。

<script src="https://cdn.jsdelivr.net/lodash/4.5.1/lodash.min.js"></script> 

Demo