LANG SELRCT

コードを書く場所についてはこちら

2019年4月29日月曜日

Googleドライブ内のファイルをファイル名で並べ替えて取得したい


Googleドライブのフォルダの中にいくつかファイルが入っていて

ファイル名を昇順で並び替えて、IDと一緒に配列に入れて

このように取得したい

[
  [日本語1, 1e0K3aBV5xxx],
  [日本語2, 1OYdKFXVqxxx],
  [英語1, 162f0ghDw63xxx],
  [英語2, 1xHV36sf4A5xxx]
]


ということを実現したくて書いたコードです


コード.gs
/************************************
フォルダ内のファイルを取得して
ファイル名で昇順に並べ替えて
ファイル名とIDの配列を返す
************************************/
function getFileArray() {
  var folderId = "ID";
  var fileArray = [];
  var files = getFiles(folderId);
  for(var i = 0; i < files.length; i++) {
    var name = files[i]['name'];
    var id = files[i]['id'];
    fileArray.push([name, id]);
  }
  Logger.log(fileArray);
}

/************************************
フォルダ内のファイルを取得して
昇順にして返す
************************************/
function getFiles(folderId) {
  var fileProps = [];
  var folder = DriveApp.getFolderById(folderId);
  var contents = folder.getFiles();
  while(contents.hasNext()) {
    var file = contents.next();
    var name = file.getName();
    var id = file.getId();
    var obj = {};
    obj["name"] = name;
    obj["id"] = id;
    fileProps.push(obj);
  }
  var sorted = objSort(fileProps);
  return fileProps;
}

/************************************
並べ替える
************************************/
function objSort(fileProps) {
  var ascending = fileProps.sort(asc);
  return ascending;
}

/************************************
nameで昇順に並べ替える
************************************/
function asc(a, b){
  var A = a.name;
  var B = b.name;
  if(A > B){
    return 1;
  }else if(A < B ){
    return -1;
  }else{
   return 0;
  }
}

意訳
 




この機能がやること
フォルダIDを指定して
配列を用意して
フォルダ内のファイルを取得して
ファイルの数だけ繰り返す
一つずつファイル名を取得して
IDも取得して
配列に追加して

ログに出す






この機能がやること
配列を用意して
ドライブの中のフォルダを取得して
フォルダ内のファイルを取得して
次のファイルがなくなるまで
次のファイルを取得して
ファイル名を取得して
ファイルIDを取得して
オブジェクトを用意して
nameを入れて
idを入れて
配列に追加する

並べ替えて
返す





この機能がやること
昇順で並べ替えて
返す





この機能がやること
引数の1つ目のnameを取得して
引数の2つ目のnameを取得して
AがBより大きければ
1を返して (A を B の後ろに並べる)
AがBより小さければ
-1を返して (A を B の前に並べる)
それ以外なら
0を返す(A と B の並びを変えない)






関連記事
Googleドライブで指定したフォルダ内にあるファイルidを取得したい


参考

Array​.prototype​.sort()