Как отсортировать список данных на листе по индивидуальному алгоритму? - PullRequest
0 голосов
/ 14 июля 2020

Я приложил код, который пытается это сделать, но мне трудно вернуть массив на лист. Данные отформатированы, как показано ниже. [1]: https://i.stack.imgur.com/6H6jF.png Для других столбцов просто вызвать SpreadsheetApp.getActiveSpreadsheet (). Sort (#); Однако при этом, по сути, я хочу сохранить порядок в списке, за исключением того, что любое значение с «Seen» в четвертом столбце помещается в конец. Я попытался сделать это с помощью:

function sortProgress() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var output = [];
  var i = 0;
  while (sheet[i] != null) {
    if (sheet[i][4] != "Seen") {
      output.push(sheet[i]);
    }
    i++;
  }
  i = 0;
  while (sheet[i] != null) {
    if (sheet[i][4] == "Seen") {
      output.push(sheet[i]);
    }
    i++;
  }
  sheet.getRange("A1:A20").setValues(output);
}

Но я не знал, как на самом деле отобразить это в электронной таблице Google. Приветствуются любые подсказки.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Я думаю, вы могли бы просто использовать sort() для сортировки массива, предоставляющего compareFunction. В этом случае вам нужно будет только проверить столбец Seen or not.

const data = [["M", "Seen", "Movie"],["M", "1/3", "Movie"],["M", "Seen", "Movie"],["M", "", "TV"]];
data.sort((a, b) =>{
  if(a[1] != "Seen" && b[1] == "Seen"){
    // a comes first
    return -1
  }
  if(a[1] == "Seen" && b[1] != "Seen"){
    // b comes first
    return 1
  }
   // mantain current order
  return 0
  
});
console.log(data);

Это даст правильный результат:

\>\>\> Array [Array ["M", "1/3", "Movie"], Array ["M", "", "TV"], Array ["M", "Seen", "Movie"], Array ["M", "Seen", "Movie"]]

После сортировки этого массива вы можете просто выполнить setValues(), как вы это делали в фрагменте кода.

0 голосов
/ 15 июля 2020

Я, вероятно, последую за ответом Расерхина, поскольку он просто более соответствует логике c, однако именно это я и реализовал для полноты.

...