var arr = [1,2,3,4]
arr.map((x,i) => arr[i+1] - x)
// 1,1,1,NaN
有没有一种方法可以使用Array.map
或Array.filter
方法中的索引来比较值,而不比较最终索引,以避免NaN
的结果?
在应用map
之前,可以使用Array#slice
删除最后一个元素。
var arr = [1,2,3,4]
console.log(arr.slice(0,-1).map((x,i) => arr[i+1] - x));
实现这一点的最短方法是
var mapped = arr.map((x,i) => arr[i+1] - x).filter(x => x);
也就是说过滤所有x为True 的值
但我认为你不能只用地图就能做到这一点。我认为map总是返回一个长度相等的数组。
不过,您可以使用reduce
来实现这一点。
var arr = [1,2,3,4]
var reduced = arr.reduce((ids,x,i) => {
if (i < arr.length-1 ){
ids.push(arr[i+1] - x)
}
return ids
}, []);
console.log(reduced)
输出
[ 1, 1, 1 ]
可以。只需使用Arra.filter()
并只返回具有基元值的值:
var arr = [1,2,3,4];
var newArr = arr.map((x,i) => arr[++i] - x)
.filter(val => val);
console.log(newArr);