如何跳过.map()中的元素?

如何跳过.map中的数组元素

我的代码:

var sources=images.map(函数(img){
if(img.src.split(’.’).pop()==“json”){//if扩展名为.json
返回null;//跳过
}
否则{
返回img.src;
}
});

这将返回:

[“img.png”,null,“img.png”]

只需.filter()首先执行以下操作:

var sources=images.filter(函数(img)){
if(img.src.split('.').pop()==“json”){
返回false;//跳过
}
返回true;
}).map(函数(img){return img.src;});

如果您不想这样做,这也不是不合理的,因为它会带来一些成本,那么您可以使用更通用的.reduce()。通常可以用.reduce表示.map()

someArray.map(函数(元素){
返回变换(元素);
});

可以写成

someArray.reduce(函数(结果,元素){
结果.推(变换(元素));
返回结果;
}, []);

因此,如果需要跳过元素,可以使用.reduce()

var sources=images.reduce(函数(结果,img){
if(img.src.split(’.’).pop()!==“json”){
结果推送(img.src);
}
返回结果;
}, []);

在该版本中,来自第一个示例的.filter()中的代码是.reduce()回调的一部分。只有在过滤操作保留图像源的情况下,才会将图像源推送到结果数组上

更新-这个问题得到了很多关注,我想补充以下澄清的评论。作为一个概念,.map()的目的就是准确地执行;“地图”;方法:根据特定规则将一个值列表转换为另一个值列表。就像一些国家的纸质地图在几个城市完全缺失的情况下看起来很奇怪一样,只有当结果值为1:1时,从一个列表到另一个列表的映射才真正有意义

我并不是说从一个旧列表中创建一个新列表并排除一些值是没有意义的。我只是想说明.map()有一个简单的目的,就是创建一个与旧数组长度相同的新数组,只使用由旧值转换而成的值

发表评论