質問: ["/abc/","/def/","/jkl/"]; /* 出力例: http://abc/ と /abc/ はOK http://abc/def/ と /def/はOK 配列a内の差分:http://ghi/ 配列b内の差分:/jkl/ */ ``` 自分で書いてみたところ、a[0]とb全部→a[1]とb全部→...という風に、 後方一致するものの出力はできました。 ``` for(let i=0;i) bの配列内でaと後方一致しないもの(/jkl/) をどう出力すれば良いかわかりません。 何かいい方法があれば教えていただきたいです。 (上記のfor文ももっとスマートに書ければ書き直したい...) ご回答の程、よろしくお願いします。
回答: > > aの配列内でbと後方一致しないもの() > > > これは、aの要素それぞれに対して、bの要素と後方一致するかどうかを調べて、どれとも一致しないものだけを表示することでできます。 一番分かりやすい方法は、フラグ変数を用いてbのどれかの要素と一致したかを調べるという方法でしょう。これをやってみると次のプログラムのようになります。 ``` for(let i=0;i > bの配列内でaと後方一致しないもの(/jkl/) > > > これも同じアイデアで可能です。ただし、ループの順番を変えて、bの各要素に対してループして、その中でaの各要素を調べるという形にすればよいでしょう。 ``` for(let i=0;i !aElm.endsWith(b[i]))) { // aの要素のどれとも後方一致しなかったら console.log("配列b内の差分:" + b[i]); } } ``` 一番最初の例については2重for文を書かないといけないのは仕方ありませんが、普通のfor文の代わりにfor-of文を使うと少し分かりやすくなるので紹介します。 ``` for(let aElm of a){ for(let bElm of b){ if(aElm.endsWith(bElm)){ console.log(aElm +"と"+ bElm +"はOK"); } } } ```