.map() で要素をスキップするにはどうすればいいですか? 質問する

.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"]

ベストアンサー1

まずはこれだけ.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()コールバックの一部です。画像ソースは、フィルター操作によって保持される場合にのみ結果配列にプッシュされます。

更新— この質問は多くの注目を集めています。そのため、次の説明を追加したいと思います。 の.map()概念としての の目的は、まさに「マップ」の意味を実行することです。つまり、特定のルールに従って、値のリストを別の値のリストに変換します。ある国の紙の地図で、いくつかの都市が完全に欠落していると奇妙に見えるのと同じように、1 つのリストから別のリストへのマッピングは、結果値が 1 対 1 で対応している場合にのみ意味を持ちます。

いくつかの値を除外した古いリストから新しいリストを作成することが無意味だと言っているのではありません。私は、.map()古い配列と同じ長さで、古い値の変換によって形成された値のみを持つ新しい配列を作成するという、1 つの単純な意図があることを明確にしようとしているだけです。

おすすめ記事