我有以下简单数组:
my_array = [1, 11, 44, 4]
我想生成一个由这些元素之间的差异组成的新数组,所以它将是:
diff_array = [10, 33, 40]
最好的解决方法是什么?
答案 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 ..!