[解決済み] .map()で要素を読み飛ばすには?
2022-03-15 14:41:46
質問
の配列要素をスキップするにはどうすればよいですか?
.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()
のコールバックがあります。画像ソースが結果配列にプッシュされるのは、フィルター操作によって保持される場合のみです。
更新
- この質問には多くの注目が集まるので、次のような明確な指摘を加えたい。の目的は
.map()
というのは、まさにquot;map"が意味するように、値のリストをある規則に従って別の値のリストに変換することです。ある国の紙の地図に、いくつかの都市が完全に欠落していると奇妙に見えるように、あるリストから別のリストへのマッピングは、結果の値が1対1である場合にのみ、本当に意味をなすのです。
一部の値を除いた古いリストから新しいリストを作成することに意味がないとは言いません。ただ、以下のことを明確にしようとしているのです。
.map()
それは、古い配列と同じ長さで、古い値を変換した値だけを含む新しい配列を作るという、ただひとつのシンプルな意図を持っています。
関連
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
jq は html ページとデータを動的に分割する。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
vueの補間表現とv-textディレクティブの違いについて
-
Vueのクラススタイルの使い方の詳細
-
[解決済み] テスト
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
jq は html ページとデータを動的に分割する。