Я не могу понять, почему мое сравнение между элементами массива всегда возвращает true. Как я могу проверить, не равны ли разные элементы в одном массиве?

Я пробовал !=, !== и !colCheck[i].equals(colCheck[x]), но это не сработало.

function mergeCells() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getActiveSheet();
  var rowsToMerge = [];
  var colCheck = sheet.getRange(8,10,79,1).getValues();

  for (var i = 0; i < 79; i++) {
    var x = i + 1;
    if (colCheck[i] != colCheck[x]) rowsToMerge.push(i);// Always returns true
    if (colCheck[i] == '') {
      break;
    }
  }
}

Я проверил элементы массивов, и даже когда они точно такие же, сравнение возвращает true.

-1
Tiago de Santana 31 Окт 2019 в 19:51
Можете ли вы привести минимальный воспроизводимый пример?
 – 
Maxime Girou
31 Окт 2019 в 19:56
Попробуйте использовать !== и === вместо != и ==, а также избегайте магических чисел, таких как 79, вы можете использовать forEach вместо for. информация на developer.mozilla.org/en-US/ документы/Интернет/JavaScript/Справочник/…
 – 
Ignacio Martínez
31 Окт 2019 в 19:56
Что вы храните в colCheck? объекты какого типа?
 – 
Cheaker
31 Окт 2019 в 19:56

1 ответ

Элементы colCheck являются объектами, поэтому сравнение с ==, !=, === или !=== просто сравнивает ссылки, что, вероятно, не соответствует вашим намерениям, попробуйте вместо этого сравнить свойства объекта.

2
Photon 31 Окт 2019 в 19:59