2016-01-07 20 views
1

我有一个随机生成的数字的数组。 我想创建一个分割所有这些数字的函数。基本上,假设我有5个数字的阵列[5,7,6,8,2],我想要的输出等于5/7/6/8/2在Javascript数组中彼此分开数字

array = [5, 7, 6, 8, 2]; 

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

return total; 

在这就是我到目前为止,但输出是不正确的。任何想法,我做错了?

+0

与您的尝试相比,输出没有意义。应该澄清预期的结果。 – charlietfl

回答

7

你已经基本上得到了你的数学倒退。用你的方法,你想逐步分配总数,而不是逐步分配总数。

var total = array[0]; 
for (var i = 1; i < array.length; i++) 
    total = total/array[i]; 
return total; 
+0

我试过了,但仍然无法返回正确的结果。这是因为第一次划分是在等于数组[0]和数组[0]本身之间进行的。任何想法如何解决它? –

+0

这段代码从不将自己的'array [0]'分开,因为循环从'i = 1'开始。使用你的样本数据,这段代码提供了一个'0.00744'的输出是正确的('5/6/7/8/2') – CollinD

+0

哦,现在我明白了。我没有看到你改变了var i = 1。你是对的!这是现在的作品!太棒了,谢谢你! –

-3

尝试......

array = [5, 7, 6, 8, 2]; 
var total = array[0]; 
for(var i = 1; i < array.length; i++) { 
    total = array[i]/total; 
} 
return total; 
4

试试这个。它使用阵列的reduce方法以及es6 arrow functions,这使它成为一个班轮。您可以使用babel将es6语法转换为es5。

var arr = [5, 7, 6, 8, 2]; 

arr.reduce((prev,curr) => prev/curr); 

ES5版本:

var arr = [5, 7, 6, 8, 2]; 

arr.reduce(function(prev, curr) { 
    return prev/curr; 
}); 

正如你可以看到in the docs,Array.reduce()将值的列表减少到一个值,通过列表循环,将一个回调函数将返回一个新的列表。在该回调可以访问4个parameteres:

PREVIOUSVALUE:如果传递回调函数后的参数,PREVIOUSVALUE将假设值,否则它会在数组中的第一项。

currentValue:循环中的当前值。

索引:循环中当前项目的索引。

阵列:列表

+0

我喜欢 - 下面是OP的一些文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce – axlj

+0

@RobG很多人都回答那。我只是提出了一个简洁的替代解决方案。至于箭头功能,有人可以使用转换器转换为es5。我已添加指向文档的链接以获取更多解释 – blessenm

0

那么你搞砸了总数,你不断分割每个新的数字与结果。你只需要翻转'/'运算符。

array = [5, 7, 6, 8, 2]; 

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

return total; 
+1

除了每个CollinD答案的初始值应该是'array [0]'而不是'1'。;-) – RobG