var a = [1, 5, 7, 3];
console.log(DiffTheArray(a));
使用[4, 2, -4]
的预期结果,即原始数组的每两个元素之间的差异,DiffTheArray
如何最简洁地实现?
我希望使用切片(a.slice(1) - a.slice(0,-1)
)来实现它,但似乎没有一种内置的方法可以在JS中从另一个数组中减去一个数组。
答案 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;
答案 2 :(得分:1)
您也可以使用常规缩减功能:
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;
如果您使用comma operator
,则可以返回到同一行并利用es6的较轻语法:
function diffTheArray(arr) {
let diff = [];
arr.reduce((a, b) => (diff.push(b - a), b));
return diff;
}
console.log(diffTheArray([1, 5, 7, 3]));
&#13;
答案 3 :(得分:0)
根据numpy solves this problem(arr[1:] - arr[:-1]
)和this example of using map with two arrays的方式,我正在考虑以下事项:
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;
然而,这是90个字符,我认为这里的其他一些答案更短,这是我情况最重要的指标。