以下ソースコードの通り、あらかじめ定義された配列と、更新後の配列(4パターン)を比較し、追加された要素と削除された要素を抽出したいです。
今の実装では、追加された要素と削除された要素をfilterを使って別々に抽出できておりますが、これを同時に抽出する方法がないかと思いご質問させていただきました。
理想は同時に抽出する方法ですが、それは難しいのではないかと思っているいたりするので、よりスマートに別々に抽出する方法がありましたら、そちらだけでもご回答いただけると幸いです。
よろしくお願いします。
Javascript
1// あらかじめ定義された配列 2const initialArray = ['a', 'b', 'c']; // 初期配列 3 4// 更新後の配列(4パターン) 5const updatedArray1 = ['a', 'c']; // 削除 6const updatedArray2 = ['a', 'b', 'c', 'd']; // 追加 7const updatedArray3 = ['b', 'd']; // 削除 & 追加 8const updatedArray4 = []; // 全削除 9 10let addedElements1 = updatedArray1.filter(x => !initialArray.includes(x)); 11let addedElements2 = updatedArray2.filter(x => !initialArray.includes(x)); 12let addedElements3 = updatedArray3.filter(x => !initialArray.includes(x)); 13let addedElements4 = updatedArray4.filter(x => !initialArray.includes(x)); 14console.log("----- added elements -----"); 15console.log(addedElements1); 16console.log(addedElements2); 17console.log(addedElements3); 18console.log(addedElements4); 19 20let removedElements1 = initialArray.filter(x => !updatedArray1.includes(x)); 21let removedElements2 = initialArray.filter(x => !updatedArray2.includes(x)); 22let removedElements3 = initialArray.filter(x => !updatedArray3.includes(x)); 23let removedElements4 = initialArray.filter(x => !updatedArray4.includes(x)); 24console.log("----- removed elements -----"); 25console.log(removedElements1); 26console.log(removedElements2); 27console.log(removedElements3); 28console.log(removedElements4);
上記の実行結果です。
----- added elements ----- [] ["d"] ["d"] [] ----- removed elements ----- ["b"] [] ["a", "c"] ["a", "b", "c"]
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/27 21:34
2018/05/27 21:40 編集
2018/05/27 22:06
退会済みユーザー
2018/05/28 05:57 編集
2018/06/03 02:17 編集
2018/06/03 03:40