[javascript] .map ()에서 요소를 건너 뛰는 방법?

에서 배열 요소를 건너 뛰려면 어떻게 .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()콜백의 일부입니다 . 필터 동작으로 이미지 소스를 유지 한 경우에만 이미지 소스가 결과 배열로 푸시됩니다.


답변