首页 > 解决方案 > 如何计算数组中从 JavaScript 中的最后一个到第一个的元素之间的差异?

问题描述

这是一个给定的数组:

arrayNum = [1, 2, 4, 5, 8, 9];
arrayS = [];
for(var i=1, len = array1.length; i<len; i++){
    arrayS.push(arrayNum[i]-arrayNum[i-1]);
  }
console.log(arrayS);

此代码计算每两个连续元素之间的差异!但是,我需要计算从最后一个元素到第一个元素之间的差异,在这种特殊情况下 9-8-5-4-2-1 = -11 会是什么?!

s1=0;
for(var j=array1[array1.length-1]; j>0; j--){
    s1 = s1 - array1[j];
  }
console.log(s1);

然而,这是行不通的!

标签: javascriptarraysfor-loop

解决方案


您可以使用Array.reduceRight()来计算与数组末尾的差异。

注意:reduce/reduceRight 在减少没有初始值的空数组时会抛出错误。我使用三元来检查长度,如果为空则返回NaN

const fn = arr =>
  arr.length ?
    arrayNum.reduceRight((s, n) => s - n) // if array is not empty
    :
    NaN // if array is empty

const arrayNum = [1, 2, 4, 5, 8, 9];

const result = arrayNum.reduceRight((s, n) => s - n)

console.log(result);

要使 for 循环正常工作,您需要在s1不设置值j的情况下使用最后一个索引进行初始化。计算时s1检查它是否未定义,并用当前数字对其进行初始化。如果不是,请减去当前数字:

const array1 = [1, 2, 4, 5, 8, 9];

let s1;

for (let j = array1.length - 1; j >= 0; j--) {
  s1 = s1 === undefined ? array1[j] : s1 - array1[j];
}

console.log(s1);


推荐阅读