【问题标题】:Calculate the sum of the elements between the minimum and maximum in a JavaScript array计算 JavaScript 数组中最小值和最大值之间元素的总和
【发布时间】:2021-07-25 03:07:03
【问题描述】:

我写了以下代码:

const main = (numbers) => {
    let indexMin = numbers.indexOf(Math.min(...numbers));
    let indexMax = numbers.indexOf(Math.max(...numbers));

    let filter = numbers.slice(indexMin, indexMax, +1);
    let result = filter.splice(1);
    let res = result.reduce((total, n) => total + n, 0);
    return Math.round(res)
};
console.log(main([5, 12, -3, -3, -3, 15, -2, 6, 7]));

对于这个例子,最小值是(第一个)-3,而最大值是 15,因此我想要 [-3, -3] 的总和,它可以正常工作。

问题是如果数组的最大元素的索引小于最小值的索引,例如当用-15 替换15 时,一切都会崩溃。我该如何解决这个问题?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    如果索引顺序错误,您可以做的一个简单技巧是切换索引:

    const main = (numbers) => {
      let indexMin = numbers.indexOf(Math.min(...numbers));
      let indexMax = numbers.indexOf(Math.max(...numbers));
    
      console.log('indexMin:', indexMin);
      console.log('indexMax:', indexMax);
    
      if (indexMin > indexMax) {
        console.log('Swap!');
        [indexMin, indexMax] = [indexMax, indexMin];
      }
    
      let filter = numbers.slice(indexMin, indexMax, +1);
      let result = filter.splice(1);
      let res = result.reduce((total, n) => total + n, 0);
      return Math.round(res)
    };
    console.log(main([5, 12, -3, -3, -3, 15, -2, 6, 7]));
    console.log(main([5, 12, -3, -3, -3, -100, -2, 6, 7]));

    就像你说的,问题是最大元素索引低于最小元素索引时。因此,在需要时简单地切换它们是一个简单但功能强大的解决方案。

    【讨论】:

    • 非常感谢,我花了一整天的时间试图找到解决这个问题的方法!
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2014-11-20
    • 2021-06-03
    • 2021-04-02
    • 2012-11-13
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多