foreachコントロールドアは役に立たないが、私だけが知らないのか、私は少し恥ずかしい.


那叫我的傻瓜...ドアをコントロールするのがforeachに役に立たないのは私だけだ...あざ笑う...别の言叶で言ってるみたいじゃないですか.とりあえずJavaScriptを勉強しましょう^^

イニシャルコード

removeWake(name) {
    let layerArr = this.olMap.getLayers().getArray();
	  this.olMap.getLayers().forEach(layer)=>{
		 if(layer.get("name") === name){
			 this.olMap.removeLayer(layer);
				return;
			}
		}
	},
mapレイヤでnameという名前の子供がいたら「消去して戻る」と書きましたが、いつもforeachで
undefinedエラーのcand read propertiesが一時停止しました.
だから私は次のようにインデックスを引きました.
removeの後にforeachが回った...あはは…!(⊙o⊙)
removeWake(name) {
    let layerArr = this.olMap.getLayers().getArray();
	  this.olMap.getLayers().forEach(layer, index)=>{
		 console.log(index);
		 if(layer.get("name") === name){
			 this.olMap.removeLayer(layer);
				return;
			}
		}
	},
検索するとforeachのreturn、break、continueのような制御文はまったく役に立たないことがわかりました~~!
これはforEachメソッドでコールバック関数が渡されたからです!
returnと書いても、最終的にはループに影響を与えることなくコールバック関数から返されます...
MDNでforEachについての説明でもそう言います!예외를 발생시키는 경우를 제외하고는 forEach를 중단시킬 방법을 없으며, 그러한 목적이라면 forEach를 사용하는 것은 잘못된 방법이다.代わりに簡単なfor loopやeach、sometなど他の方法を使って…!

ソース
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
  • 変更されたコード

    removeWake(name) {
        let layerArr = this.olMap.getLayers().getArray();
        let layerNum = layerArr.length;
        for (let idx = 0; idx < layerNum; idx++) { 
          if (layerArr[idx].get("name") === name) {
            this.olMap.removeLayer(layerArr[idx]);
            return;
          }
        }
    	},

    ▼結論は!


    配列全体を巡回する必要がない場合はforeachを使用しないでください.
    foreachとforを同じ私だと思っています...さあ、今は違いを知って、正しく使います!