에서 배열 요소를 건너 뛰려면 어떻게 .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()
. 당신은 일반적으로 표현할 수 .map()
의 측면에서 .reduce
:
someArray.map(function(element) {
return transform(element);
});
로 쓸 수 있습니다
someArray.reduce(function(result, element) {
result.push(transform(element));
return result;
}, []);
따라서 요소를 건너 뛰어야하는 경우 다음을 사용하여 쉽게 수행 할 수 있습니다 .reduce()
.
var sources = images.reduce(function(result, img) {
if (img.src.split('.').pop() !== "json") {
result.push(img.src);
}
return result;
}, []);
이 버전 .filter()
에서 첫 번째 샘플 의 코드 는 .reduce()
콜백의 일부입니다 . 필터 동작으로 이미지 소스를 유지 한 경우에만 이미지 소스가 결과 배열로 푸시됩니다.