Javascript:递归地计算数组中所有元素的总和?

Javascript:递归地计算数组中所有元素的总和?,javascript,arrays,recursion,ecmascript-6,ecmascript-5,Javascript,Arrays,Recursion,Ecmascript 6,Ecmascript 5,我试图编写一个递归函数,使用Javascript计算数组中的项数 我可以用Python来做: def count(list): if list == []: return 0 return 1 + count(list[1:]) 如何在ES5和ES6中执行此操作?首先,您必须知道数组具有用于此目的的属性。知道了这一点,如果您仍然希望通过递归获得它,我将执行类似于下一步的操作,使用and。这种方法避免使用.length属性来检测停止条件 const count=(列表)=> { 设i

我试图编写一个递归函数,使用Javascript计算数组中的项数

我可以用Python来做:

def count(list):
 if list == []:
  return 0
 return 1 + count(list[1:]) 

如何在ES5和ES6中执行此操作?

首先,您必须知道
数组具有用于此目的的属性。知道了这一点,如果您仍然希望通过递归获得它,我将执行类似于下一步的操作,使用and。这种方法避免使用
.length
属性来检测停止条件

const count=(列表)=>
{
设ite=list[Symbol.iterator]();
如果(ite.next().done)
返回0;
其他的
返回1+计数(list.slice(1));
}
console.log(计数([]);
log(计数([undefined,null]);
log(计数([1,2,未定义,3,4])
.as控制台{背景色:黑色!重要;颜色:石灰;}

.作为控制台包装{max height:100%!important;top:0;}
首先,您必须知道
数组
具有用于此目的的属性。知道了这一点,如果您仍然希望通过递归获得它,我将执行类似于下一步的操作,使用and。这种方法避免使用
.length
属性来检测停止条件

const count=(列表)=>
{
设ite=list[Symbol.iterator]();
如果(ite.next().done)
返回0;
其他的
返回1+计数(list.slice(1));
}
console.log(计数([]);
log(计数([undefined,null]);
log(计数([1,2,未定义,3,4])
.as控制台{背景色:黑色!重要;颜色:石灰;}

.as控制台包装{最大高度:100%!重要;顶部:0;}
ES6递归函数:

const count=arr=>arr[0]==未定义?0:1+计数(arr.slice(1));
log(计数([1,2,3]);

console.log(计数([])ES6递归函数:

const count=arr=>arr[0]==未定义?0:1+计数(arr.slice(1));
log(计数([1,2,3]);

console.log(计数([])计算元素是很可笑的,因为您可以只取
长度
属性。它将是O(1)并且做你期望的事情。对于元素的求和或处理:

//递归地。仅适用于阵列
常量元素=(arr)=>{
if(arr.length==1)返回arr[0];
常数[e,…rest]=arr;
返回e+sum元素(剩余);
}
//递归且有效。仅适用于阵列
常量元素=(arr)=>{
常量助手=(索引,acc)=>索引<0?acc助手(索引-1,acc+arr[index]);
返回帮助器(arr.length-1,0);
}
//使用高阶函数。适用于已定义reduce的所有集合
const-summelements=list=>list.reduce((acc,e)=>acc+e),0);
//使用迭代器。适用于已定义迭代器的所有集合
常量元素=(列表)=>{
设和=0;
用于(列表常数){
总和+=e;
}
回报金额;
}

计算元素是很可笑的,因为您可以只取
长度属性。它将是O(1)并且做你期望的事情。对于元素的求和或处理:

//递归地。仅适用于阵列
常量元素=(arr)=>{
if(arr.length==1)返回arr[0];
常数[e,…rest]=arr;
返回e+sum元素(剩余);
}
//递归且有效。仅适用于阵列
常量元素=(arr)=>{
常量助手=(索引,acc)=>索引<0?acc助手(索引-1,acc+arr[index]);
返回帮助器(arr.length-1,0);
}
//使用高阶函数。适用于已定义reduce的所有集合
const-summelements=list=>list.reduce((acc,e)=>acc+e),0);
//使用迭代器。适用于已定义迭代器的所有集合
常量元素=(列表)=>{
设和=0;
用于(列表常数){
总和+=e;
}
回报金额;
}

最符合es6标准、fp标准的书写方式。适用于所有iterables

const count=xs=>
xs[Symbol.iterator]().next().done
? 0
:1+([,…xr])=>计数(xr))(xs);
日志(计数([1,2,3]);
控制台日志(计数(“hello123”);
console.log(计数({
*[符号.迭代器](){
产量1;
产量2;
产量3;
产量4;
}
}));
console.log(计数([]);

log(计数([1,未定义,2])最符合es6标准,最符合fp标准的书写方式。适用于所有iterables

const count=xs=>
xs[Symbol.iterator]().next().done
? 0
:1+([,…xr])=>计数(xr))(xs);
日志(计数([1,2,3]);
控制台日志(计数(“hello123”);
console.log(计数({
*[符号.迭代器](){
产量1;
产量2;
产量3;
产量4;
}
}));
console.log(计数([]);
log(计数([1,未定义,2])这里有两个解决方案。

const count1=([x,…xs])=>x?1+count1(xs):0
常量count2=(xs)=>xs.reduce((y)=>y+1,0)
log(count1([1,2,3,4,5]))
log(count2([1,2,3,4,5])
这里有两个解决方案。
const count1=([x,…xs])=>x?1+count1(xs):0
常量count2=(xs)=>xs.reduce((y)=>y+1,0)
log(count1([1,2,3,4,5]))

log(count2([1,2,3,4,5]))
它是二维数组吗?如果不是,则可以使用length()。为什么在拥有属性时需要它?另外请注意,在Javascript上,
[]=[]
false
,因此您必须检查停止条件是否为
list.length==0
。问题的标题有点混乱,我建议您将其编辑为“Javascript:递归计算数组中的元素数?”因为根据正文和代码示例,这就是您要做的。它是二维数组吗?如果不是,则可以使用length()。为什么在拥有属性时需要它?另外请注意,在Javascript上,
[]=[]
false
,因此您必须检查停止条件是否为
list.length==0
。问题的标题有点混乱,我建议您将其编辑为“Javascript:Recursi”