停止映射或过滤器迭代最后一个索引


var arr = [1,2,3,4]
arr.map((x,i) => arr[i+1] - x)  
// 1,1,1,NaN

有没有一种方法可以使用Array.mapArray.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);

最新更新