Javascript跟踪数组中元素之间的差异?

时间:2017-03-20 08:07:16

标签: javascript arrays

我有以下简单数组:

my_array = [1, 11, 44, 4]

我想生成一个由这些元素之间的差异组成的新数组,所以它将是:

diff_array = [10, 33, 40]

最好的解决方法是什么?

4 个答案:

答案 0 :(得分:6)

您可以使用Array#reduce进行迭代,并使用绝对增量来推送到结果数组。

基本上你需要array.length - 1增量和迭代。在这种情况下3。如果没有给出起始值,则减少前两个元素并迭代所需长度。虽然它需要delta的最后一个值,但返回最后一个值。

最后,reduce的返回值被丢弃,因为它不再使用了。

1    11    44    4   values
 \  /  \  /  \  /
  10    33    40     Math.abs(delta)

var array = [1, 11, 44, 4],
    result = [];
    
array.reduce(function (a, b) {
    result.push(Math.abs(a - b));
    return b; 
});

console.log(result);

答案 1 :(得分:3)

这是一个简单的解决方案,具有普通的旧for循环

array = [1, 11, 44, 4]
diff = []

for(var i = 1 ; i < array.length ; i++){
  diff.push(Math.abs(array[i] - array[i-1]))
}

基本上你从数组的第二个元素开始循环,然后从prev减去并推送到新数组。

答案 2 :(得分:2)

使用此函数,将其传递给输入数组,返回所需的数组。

function diff(array){
 var out = []
 for (var i = 0; i < array.length-1; i++) {
    out.push(Math.abs(array[i+1]-array[i]))
 }
 return out;
}

答案 3 :(得分:1)

通常可以使用.reduce()执行此操作,但只是为了好玩,我们可以使用它。

var myArray = [1, 11, 44, 4],
       diff = a => a.length > 1 ? [Math.abs(a[1]-a[0])].concat(diff(a.slice(1))) : [];

console.log(diff(myArray));

注意:以上代码仅用于演示目的。在你的日常生活中,你不应该做这样的事情。使用你喜欢的任何循环但从不在JS代码中使用递归。你想看看我的意思吗?喂这个数组。

var myArray = Array(1000000).fill().map(_ => ~~(Math.random()*100+1));

它会使浏览器的标签崩溃。 Peah ..!