2017-02-10 41 views
-1

有人可以解釋爲什麼行Logger.log("%s EQUALS %s",col1[i],col2[i]);永遠不會被調用嗎?林新Javascript,但基於this SO post我使用正確的運算符在if聲明比較。值保證是整數,或者是一個空單元格,如果這有所作爲。Javascript等於比較不起作用

function SetFilter(){ 
    var first_row_to_hide=4; 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var maxrows=sheet.getMaxRows(); 
    col1 = sheet.getRange(first_row_to_hide,3,maxrows,1).getValues();//getRange(row, column, numRows, numColumns) -- column: C 
    col2 = sheet.getRange(first_row_to_hide,4,maxrows,1).getValues();//column: D 
    for (var i = 1; i < col1.length; i++){ 
    Logger.log("%s ? %s",col1[i],col2[i]); 
    if (col1[i] === col2[i]){ 
    Logger.log("%s EQUALS %s",col1[i],col2[i]); 
    }//sheet.hideRows(i+first_row_to_hide); 
    } 
    Logger.log("DONE"); 
} 

在列1和示例值2:

col1 col2 Log output of '%s ? %s' 
1 2 [1.0] ? [2.0] 
1 1 [1.0] ? [1.0] 
0 0 [0.0] ? [0.0] 
0 1 [0.0] ? [0.0] 
4 5 [4.0] ? [5.0] 
+1

*〜是的,因爲'COL1 [i]'和'col2 [i]'從不[相同](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity) – Phil

+1

什麼被記錄'%s? %s'? – Ryan

+0

請問您可以添加'col1 [i]'和'col2 [i]'的值。另外,嚴格的相等運算符需要兩個操作數的類型相同。 – Agalo

回答

0

「setValues方法()」 具有2維陣列。所以,你的腳本通過改變

if (col1[i] === col2[i]){ 
Logger.log("%s EQUALS %s",col1[i],col2[i]); 
}//sheet.hideRows(i+first_row_to_hide); 

到: 「有人能解釋爲什麼行?是從來沒有所謂的」

if (col1[i][0] === col2[i][0]){ 
Logger.log("%s EQUALS %s",col1[i],col2[i]); 
}//sheet.hideRows(i+first_row_to_hide); 
0

您使用的嚴格比較===如果操作數是相同類型的,並且內容是相同的(其中,對象是其是唯一的真正有關他們必須引用完全相同的對象)。

鑑於抽象比較==在比較之前將操作數轉換爲相同類型。

可能col1[i]col2[i]違反上述條件之一。 (在它們是對象的情況下,也==將返回false,除非它們引用同一個對象)

MDN Comparison operator documentation

+0

這很有道理,但它們都是整數列(請參閱上面我更新的示例)。我可以錯過別的東西嗎,還是我誤解了你? – Rilcon42

+0

邊注意,但它聽起來很奇怪在技術上,沒有整數 - 類型會顯示爲'數字'。您可以使用'typeof'運算符來檢查變量的類型。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof – roger

+0

看起來你在上面的評論中解決了它! - 但檢查類型可能有助於防止將來出現這種混淆。 – roger