["す", "も", "も"]
という配列から重複を除いた
["す", "も"]
という配列を作りたい
コード.gs
function get_unique(){ var values = ["す", "も", "も"]; var unique = values.filter(return_unique); Logger.log(unique); } function return_unique(value_i, index, array){ var value_i_index = array.indexOf(value_i); var result = value_i_index === index; return result; } |
意訳この機能がやること 重複を含む配列 重複のない一意の配列にして ログに出す この機能がやること(配列の各値, そのindex番号, 配列自身) 渡された値を配列の中で探して、最初に見つかったindex番号を取得して 引数で渡されているindex番号と同じかどうか判定して 結果をtrueかfalseで返す(trueの場合は新しい配列に値が追加される) |
実行結果
補足
どういう動きをしているのか考えてみた
filterを使って
配列内で前から順番に値を探して
見つかった値のindex位置と
現在探している値のindex位置が同じなら
trueを返して新しい配列に追加する
配列が ["す","も","も"] の場合
get_unique(value_i, index, array)
がやっていることをみると
0. get_unique("す", 0, ["す","も","も"])
["す","も","も"].indexOf("す")→0番目に見つかって、渡されたindexも0なのでtrueが返る
1. get_unique("も", 1, ["す","も","も"])
["す","も","も"].indexOf("も")→1番目に見つかって、渡されたindexも1なのでtrueが返る
2. get_unique("も", 2, ["す","も","も"])
["す","も","も"].indexOf("も")→1番目に見つかるが、渡されたindexは2なのでfasleが返る