Javascript 使用递归的数组中元素的总和,即使它们是字符串

Javascript 使用递归的数组中元素的总和,即使它们是字符串,javascript,arrays,recursion,Javascript,Arrays,Recursion,必须创建一个函数来返回数组中元素的和,但是如果数组是 ["a","b","c"] // output : abc 到目前为止我有 function calculateSumRecursion(array) { //your code if (array.length === 0 ) { return 0 }

必须创建一个函数来返回数组中元素的和,但是如果数组是

["a","b","c"] // output : abc    
到目前为止我有

 function calculateSumRecursion(array) {
          //your code
          if (array.length === 0 ) {
            return 0
          }
          
      return array[0] + calculateSumRecursion(array.slice(1))
    }
我发现了如何使用递归计算所有数字的总和,但是当它是一个字符串数组时

array = ["a","b","c"] 
它还我

// abc0
因为if语句。。有什么办法可以说吗

if (array.length === 0) return nothing instead of a 0 (that work only when it's an array of number?)

在递归基本情况下返回空字符串。只需将您的
返回0
替换为
返回“”

常量数组=['a','b','c']; 函数calculateSumRecursion(数组){ if(array.length==0){ 返回“”; } 返回数组[0]+calculateSumRecursion(array.slice(1)); }
log(calculateSumRecursion(数组))将
返回0
更改为
返回“”
,这将向总和中添加一个空字符串。

当长度为1时,只需
返回数组中的唯一值,而不必等到长度为0。这样,您总是对兼容类型(数字或字符串)求和。请注意,如果使用空数组调用函数,仍然需要对0数组长度进行测试。在这种情况下,您需要选择要返回的内容;根据请求,它是0

函数calculateSumRecursion(数组){
if(array.length==0){
返回0;
}
if(array.length==1){
返回数组[0];
}
返回数组[0]+calculateSumRecursion(array.slice(1))
}
log(calculateSumRecursion([1,2,3,4,5]);
log(calculateSumRecursion(['a','b','c']);

log(calculateSumRecursion([])当数组为空时,您已返回
0

现在,您正在执行字符串操作,因此需要返回空值(而不是零),以便可以负担得起返回


有一种更简单的方法可以做到这一点:

    function calculateSumRecursion(array) {
        var out = array[0];
        for (let i = 1; i < array.length; i++) {
            out = out + array[i];
        }
        return out;
    }
函数calculateSumRecursion(数组){
var out=数组[0];
for(设i=1;i
切片版本

let arr = [1,2,3,4,5] // output : abc
let sum = calculateSumRecursion(arr);

function calculateSumRecursion (arr) {
    return arr.length ? arr[0] + calculateSumRecursion(arr.slice(1)) : 0;
}

什么是“总和”?请添加一些示例。
+
如果运算符的任一侧是字符串,则将连接到字符串中。如果输出字符串中不需要它,为什么要返回0?总和为[1,2,3,4,5]=15@OP…如果必须定义
calculateSumRecursion([])
,请在(!array.length){return propertiveValuehere;}中添加
if(!array.length){return propertiveValuehere;}
在开头。函数无法知道您是想要
还是
0
在这种情况下,您必须选择一个。@T.J.Crowder谢谢-我已经用注释和代码更新了答案,以处理这种情况。此解决方案对我有帮助,但我需要,当数组为空时,要返回0..@YoëlZerbib,我已经编辑了代码,为一个空数组返回0,这正是我正在搜索的,感谢您和soory在我的帖子中的混淆:)您可以添加一个关于您修复了什么的描述吗?OP似乎希望它在给定数字时进行数字求和,在给定字符串时进行字符串连接。这可不行。(但问题也很不清楚。)@evolutionxbox我已经添加了描述。你的编辑基本上会添加到你的中。也许最好不要那样做。您可能没有抄袭,但查看其他答案很重要,如果其他人已经发布了正确的答案,请删除您的答案。(我一直这么做。)谢谢,但当数组为空时,我需要返回0。。当数组为空时是否有方法返回0,当数组为[“a”、“b”、“c”]时是否有方法返回abc?OP似乎希望它在给定数字时进行数字求和,在给定字符串时进行字符串连接。这可不行。(但问题也很不清楚。)如果数组的conations数不起作用,代码会输出一个stringThis不起作用,这就是OP想要的我需要递归和拼接函数我被告知要使用slice()来实现这个函数,但是的,我想到了pop(),它对我来说也更方便:)谢谢
let arr = [1,2,3,4,5] // output : abc
let sum = calculateSumRecursion(arr);

function calculateSumRecursion (arr) {
    return arr.length ? arr.pop() + calculateSumRecursion(arr) : 0;
}
let arr = [1,2,3,4,5] // output : abc
let sum = calculateSumRecursion(arr);

function calculateSumRecursion (arr) {
    return arr.length ? arr[0] + calculateSumRecursion(arr.slice(1)) : 0;
}