Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 算法问题-减少所需的方法解决方案_Javascript_Algorithm - Fatal编程技术网

Javascript 算法问题-减少所需的方法解决方案

Javascript 算法问题-减少所需的方法解决方案,javascript,algorithm,Javascript,Algorithm,我刚刚编写了一个算法,将执行以下操作: function sumAll (arr) { let min = Math.min(...arr); let max = Math.max(...arr); return [...Array(max - min + 1).keys()] .map((_,i) => i + min) .reduce((a,b) => a + b); } 给出了一个数组,即[1,5] 该函数将显示数组中数

我刚刚编写了一个算法,将执行以下操作:

function sumAll (arr) {
    let min = Math.min(...arr);
    let max = Math.max(...arr);
    return [...Array(max - min + 1).keys()]
        .map((_,i) => i + min)
        .reduce((a,b) => a + b);
}
  • 给出了一个数组,即
    [1,5]
  • 该函数将显示数组中数字之间的数字
  • 该函数将这两个数字加上它们之间的所有数字
  • 问题:

    我觉得这个解决方案没有我希望的那么完美。我一直试图使用reduce,以某种方式控制index参数,来替换
    for
    语句,但没有成功。我想得到一些帮助,我如何才能做到这一点,请

    
    var sumAll = (arr) => {
        let max = Math.max(...arr);
        let min = Math.min(...arr);
        let newArr = [];
        for (var i = min; i <= max; i++) { newArr.push(min++) }
        return newArr.reduce(function(a,b) {return a+b})
    }
    
    console.log(sumAll(arr))
    // return 15, that is the sum of the numbers in newArr [1, 2, 3, 4, 5].```
    
    
    
    var sumAll=(arr)=>{
    设max=Math.max(…arr);
    设min=Math.min(…arr);
    设newArr=[];
    
    对于(var i=min;i如果您的目标只是求两个数字之间的和,您可以使用以下公式:
    (max*(max+1)-(min)*(min-1))/2
    。但这并不能完全解决如何使用函数运算来解决此问题

    var sumBetweenScanningRange=(arr)=>{
    设max=Math.max(…arr);
    设min=Math.min(…arr);
    返回值(最大*(最大+1)-min*(最小-1))/2
    }
    
    console.log(SumBetweenScanningRange([1,1,3,5])
    如果您的目标只是找到两个数字之间的和,您可以使用以下公式:
    (max*(max+1)-(min)*(min-1))/2
    。但这并不能完全解决如何使用函数操作来解决这个问题

    var sumBetweenScanningRange=(arr)=>{
    设max=Math.max(…arr);
    设min=Math.min(…arr);
    返回值(最大*(最大+1)-min*(最小-1))/2
    }
    
    console.log(sumBetweenSpanningRange([1,1,3,5])
    我想它有点不完善,但不太完善。您说您想用
    reduce
    替换
    for
    循环。但是为什么不换一种方式,用
    for
    循环替换
    reduce
    方法呢:

    function sumAll (arr) {
        let min = Math.min(...arr);
        let max = Math.max(...arr);
        let result = 0;
        for (var i = min; i <= max; i++) 
            result += i;
        return result;
    }
    

    但是你在做什么还不太清楚,所以我不会。我想它有点不完善,但不太完善。你说你想用
    reduce
    替换
    for
    循环。但是为什么不换个方向,用
    for
    循环替换
    reduce
    方法呢:

    function sumAll (arr) {
        let min = Math.min(...arr);
        let max = Math.max(...arr);
        let result = 0;
        for (var i = min; i <= max; i++) 
            result += i;
        return result;
    }
    

    但是不太清楚你在做什么,所以我不会。VSCode没有给出错误的原因是因为你没有在VSCode中使用,并且你没有初始化变量
    I
    。使用
    (让我=0;iHi在那里!我几秒钟前在FCC上发现了这个问题,在阅读你的评论之前编辑了这篇文章。非常感谢你的建议,先生。现在我只是尝试使用
    reduce
    方法,而不是使用
    for
    循环。我想使用
    reduce
    会使我的算法变得更简单。)n声明性语句,而不是此命令式语句。VSCode没有给出错误的原因是您没有在VSCode中使用,并且您没有初始化变量
    i
    。请使用
    进行(让我=0;iHi在那里!我几秒钟前在FCC上发现了这个问题,在阅读你的评论之前编辑了这篇文章。非常感谢你的建议,先生。现在我只是尝试使用
    reduce
    方法,而不是使用
    for
    循环。我想使用
    reduce
    会使我的算法变得更简单。)n一个声明性语句,而不是这个命令式语句。那么,为什么不把它放在一个
    sumAll
    函数中,在你的公式中使用他的“min”和“max”运算呢?如果你这样做的话,你的答案可能会比我的强。用纯粗糙的数学,只用一行就可以很好地解决它。谢谢谢谢你的支持。那么为什么不多走一英里,把它放在一个
    sumAll
    函数中,在你的公式中使用他的“min”和“max”运算呢?如果你这样做,你的答案可能会比我的强。用纯粗糙的数学来解决这个问题,只需一行代码。多亏了你的支持。