如何跳过.map()中的元素? [英] How to skip over an element in .map()?
问题描述
如何跳过 .map
中的数组元素?
How can I skip an array element in .map
?
我的代码:
var sources = images.map(function (img) {
if(img.src.split('.').pop() === "json"){ // if extension is .json
return null; // skip
}
else{
return img.src;
}
});
这将返回:
["img.png", null, "img.png"]
推荐答案
只需 .filter()
首先:
var sources = images.filter(function(img) {
if (img.src.split('.').pop() === "json") {
return false; // skip
}
return true;
}).map(function(img) { return img.src; });
如果你不想这样做,这是不合理的,因为它有一些成本,你可以使用更通用的 .reduce()
。您通常可以用 .reduce
表示 .map
:
If you don't want to do that, which is not unreasonable since it has some cost, you can use the more general .reduce()
. You can generally express .map()
in terms of .reduce
:
someArray.map(function(element) {
return transform(element);
});
可以写成
someArray.reduce(function(result, element) {
result.push(transform(element));
return result;
}, []);
因此,如果您需要跳过元素,可以使用轻松完成。 reduce()
:
So if you need to skip elements, you can do that easily with .reduce()
:
var sources = images.reduce(function(result, img) {
if (img.src.split('.').pop() !== "json") {
result.push(img.src);
}
return result;
}, []);
在该版本中, .filter()中的代码$来自第一个样本的c $ c>是
.reduce()
回调的一部分。在过滤操作保留的情况下,图像源仅被推送到结果数组上。
In that version, the code in the .filter()
from the first sample is part of the .reduce()
callback. The image source is only pushed onto the result array in the case where the filter operation would have kept it.
这篇关于如何跳过.map()中的元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!