0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[GAS][JS] 配列Aにあって配列Bにない値を取り出したい

Last updated at Posted at 2020-08-05

配列Aには存在していて、配列Bに存在しないものを取り出したい。という事がありました。

ケースとしては すでに記録されているデータがあって(existData)、新たにもらったデータ(newData) のうち、existData にあるものは無視して新しいものだけを取り出したい というものでした。

教えてもらったコードが下記。きっと後でも使うのでメモ。

下記の例では [4,5] を取り出したい。

javascript/GAS
function pickupNewData(){
  const newData   = [3,4,5];
  const existData = [1,2,3];

  const filtered = newData.filter( newVal => {
    const hasValue = existData.some( existVal => existVal === newVal );
    return !hasValue;
  });
  console.log(filtered); // => [ 4, 5 ]
}

私、Javascriptで配列を扱う関数(mapとかfilterとかsomeとかreduceとか)を扱うのが苦手なんです。なのでこのコードも、filterの中でsomeがいて、パッとみて「どゆことだ?」って思ってしまうのです。ゆっくり考えたらわかるのにね。

もっといい方法がありそう?
(追記) コメント欄に @xtetsuji さんからアドバイスもらいましたので是非そちらも見てみてください!

ちなみに

return hasValue; // !を取る

にすると「どちらの配列にも存在するもの」である [3] が取得できます。

追記: 高階関数

その後、filter とか map みたいのを「高階関数」というんだと知りました。高階関数についてはこの動画がめちゃめちゃわかりかすかったので紹介します。英語苦手な私でも字幕付きで理解できました。

0
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?