~ここBLEACHの世界でのお話...~
隠密機動部隊 「山本総隊長!この尸魂界(ソウルソサエティ)の中に敵が侵入しております。それも我ら護廷十三隊の中に複数名の裏切り者がいるという密告を受けており、一刻も早くその裏切り者達を除いて作戦会議を立てたく存じます。つきましては、裏切り者以外の名前で構成された配列をfunctionの戻り値としていただけますでしょうか?」
山本 元柳斎 重國 「うむ、相分かった」
と言うことで、配列Aの中に配列Bが含まれている場合に配列Bの情報を抜いた配列をいかに短いコードで作ろうか考えた末のエントリです。
初めは考えなしにfor文の2重ループでやればいっかー。とか思っていたんですが、いつまでもそんなことはしていられないですよね。
ということで 配列の処理回数をいかに少なくできるかをモットーにコードを書いたのでその備忘録として書きました。
コードを関数化とすることでそのままコピーすれば皆さんがそのまま手元でも使える様にしています。参考にいただければと思います。
あと、これは基本的にはGoogle App Scriptでコードを書いている時に必要で書いたものですが、基本的にはJSライクにコードも使い回すことができるのでそんな感じの方も参考にしていただければと思います。
GoogleAppScript
const thirteenCourtGuardSquadsArr = [
"山本元柳斎",
"砕蜂",
"市丸ギン",
"卯ノ花烈 ",
"藍染惣右介",
"朽木白哉",
"狛村左陣",
"京楽春水",
"東仙要",
"日番谷冬獅郎",
"更木剣八",
"涅マユリ",
"浮竹十四郎",
];
const enemyArr = ["藍染惣右介", "市丸ギン", "東仙要"];
const allyArr = gotei13(thirteenCourtGuardSquadsArr, enemyArr);
function gotei13(baseArr, partArr) {
// // こちらのAパターンは処理回数が多くなってしまうので見送り。参考までに
// let returnArr = [];
// // パターンA
// // 処理回数:13回
// baseArr.forEach((bSub) => {
// if (!partArr.includes(bSub)) {
// returnArr.push(b_sub);
// }
// });
// return returnArr;
// パターンB
// 処理回数:3回 →Aパターンより短くていいね!
partArr.forEach((enemyElm) => {
let index = baseArr.indexOf(enemyElm);
baseArr.splice(index, 1);
});
return baseArr;
// 期待する戻り値:["山本元柳斎","砕蜂","卯ノ花烈","朽木白哉","狛村左陣","京楽春水","日番谷冬獅郎","更木剣八","涅マユリ","浮竹十四郎"];
}
山本総隊長「うむ、ではallyArrの隊長達を呼べい!」
---以上です---
(※returnも入れると5行以内で書けたので割といいなと思いました。)
=参考記事=