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

Javascript跟踪数组中元素之间的差异?,javascript,arrays,Javascript,Arrays,我有以下简单数组: my_array = [1, 11, 44, 4] 我想生成一个由这些元素之间的差异组成的新数组,因此它将是: diff_array = [10, 33, 40] 最好的办法是什么 可以用于迭代,并获取绝对增量以推送到结果数组 基本上,您需要array.length-1delta和迭代。在这种情况下,3。如果没有给出起始值,Reduce将获取前两个元素并迭代所需的长度。虽然它需要delta的最后一个值,但会返回最后一个值 最后,reduce的返回值被丢弃,因为它不再被使用

我有以下简单数组:

my_array = [1, 11, 44, 4]
我想生成一个由这些元素之间的差异组成的新数组,因此它将是:

diff_array = [10, 33, 40]
最好的办法是什么

可以用于迭代,并获取绝对增量以推送到结果数组

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

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

var数组=[1,11,44,4],
结果=[];
array.reduce(函数(a,b){
结果推(数学abs(a-b));
返回b;
});

控制台日志(结果)使用此函数,将输入数组传递给它,返回所需的数组

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;
}
函数差异(数组){
var out=[]
对于(var i=0;i
这是一个简单的解决方案,它使用了一个普通的
for
循环

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

for(var i = 1 ; i < array.length ; i++){
  diff.push(Math.abs(array[i] - array[i-1]))
}
array=[1,11,44,4]
差异=[]
对于(变量i=1;i

基本上,从数组的第二个元素开始循环,从上一个元素中减去,然后推到新数组

通常可以使用
.reduce()
来实现这一点,但只是为了好玩,我们可以使用一些功能性的工具

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

log(diff(myArray))请添加解释。您能解释一下它为什么工作吗?尤其是
return
语句。谢谢@Mistalis请参阅并解释此方法比仅循环数组要慢得多。@wdetac,a
for
循环比任何数组方法都快。您正在寻找最佳方法,但没有显示代码。如果其中任何一种方法比您的方法更好,我们将如何进行比较?这一种方法比for loop
方法更快,但不知何故很难阅读。所以这可能不是最好的。@wdetac我同意,JS本身就变得非常精神分裂。虽然上面的代码非常简单,但与其他语言不同,JS有许多不同的方式来表达相同的内容。你不应该知道所有这些。在Haskell中,您有非常严格的语法和实现目标的某些方法。在JS中有while循环,for循环,递归,函子,for In循环,for of循环,我的意思是来吧。您可能非常了解JS,并且可能很难理解简单的代码。这不是你的错,是JS试图同时具备命令性和功能性。@wdetac顺便说一句,我认为这段代码的性能远远低于
。reduce()
,把for循环放在一边。此外,在JS中,除非可以保证数组长度非常有限,否则永远不要将递归用于数组操作。事实上,在JS中,应该完全忘记递归。只是为了好玩:)
array = [1, 11, 44, 4]
diff = []

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