计算数组的1d差异

时间:2016-10-18 03:25:02

标签: javascript functional-programming

var a = [1, 5, 7, 3];

console.log(DiffTheArray(a));

使用[4, 2, -4]的预期结果,即原始数组的每两个元素之间的差异,DiffTheArray如何最简洁地实现?

我希望使用切片(a.slice(1) - a.slice(0,-1))来实现它,但似乎没有一种内置的方法可以在JS中从另一个数组中减去一个数组。

4 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.reduceRight()



var a = [1, 5, 7, 3];
var res = [];
a.reduceRight(function(a, b, index) {
  res[index] = a - b;
  return b
});

console.log(res);




答案 1 :(得分:1)

你可以迭代整个数组:



function DiffTheArray(arr) {
  var diffArr = [];

  for (var i = 0; i < arr.length - 1; i++) {
    diffArr.push(arr[i + 1] - arr[i]);
  }

  return diffArr;
}

console.log(DiffTheArray([1, 5, 7, 3]));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您也可以使用常规缩减功能:

&#13;
&#13;
function diffTheArray(arr) {
  let diff = [];
  arr.reduce((a, b) => {
    diff.push(b - a);
    return b;
  });
  return diff;
}

var a = [1, 5, 7, 3];
console.log(diffTheArray(a));
&#13;
&#13;
&#13;

如果您使用comma operator,则可以返回到同一行并利用es6的较轻语法:

&#13;
&#13;
function diffTheArray(arr) {
  let diff = [];
  arr.reduce((a, b) => (diff.push(b - a), b));
  return diff;
}

console.log(diffTheArray([1, 5, 7, 3]));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

根据numpy solves this problemarr[1:] - arr[:-1])和this example of using map with two arrays的方式,我正在考虑以下事项:

&#13;
&#13;
function diffTheArray(arr) {
    return arr.slice(1).map(function(e, i){return e-arr.slice(0,-1)[i];});
}

var a = [1,5,7,3];
console.log(diffTheArray(a));
&#13;
&#13;
&#13;

然而,这是90个字符,我认为这里的其他一些答案更短,这是我情况最重要的指标。