javascript认为两个数组中的值不匹配,即使它们确实匹配

时间:2017-07-27 19:59:38

标签: javascript

这段代码让我陷入了困境。

if(colList[i] != checkList[i]) {
  var colTest = colList[i];
  var checkTest = checkList[i];

从调试的屏幕截图中可以看出,值是相同的。 ScreenShot

有关if语句为何认为这些值不同的任何提示?

编辑:Here is a screenshot showing the full arrays.

同样,我不确定为什么这很重要。实际上,出于测试目的,我有两个数组都来自完全相同的源数据。

第二次编辑:

以下是所有相关代码。再次,正如您所看到的那样,数组是相同的。

var colList = sheet.getRange(startRow,watchCol,lastRow,1).getValues(); // Data set with all values to watch
var checkList = sheet.getRange(startRow,watchCol,lastRow,1).getValues(); // Data set with all the check values

function timeStamp() {
  for(var i = 0; i <= colList.length; i++)
    if(colList[i] != checkList[i]) {
      return colList
      return checkList

以下是尝试将其视为多维数组的完整代码。此代码不起作用并返回&#34;无法读取属性&#34; 0&#34;来自undefined。 (第13行,&#34;

var sheet = SpreadsheetApp.getActive().getSheetByName("Sheet1");
var startRow = 2; // First row with Data
var lastRow = sheet.getLastRow() - startRow;
var watchCol = 2; // Column to check for changes
var checkCol = 7; // Column to check against
var timeCol = 3; // Column to put the time stamp in
var colList = sheet.getRange(startRow,watchCol,lastRow,1).getValues(); // Data set with all values to watch
var checkList = sheet.getRange(startRow,watchCol,lastRow,1).getValues(); // Data set with all the check values

function timeStamp() {
  for(var i = 0; i <= colList.length; i++)
  for(var j = 0; j < checkList.length; j++){
    if(colList[i][j] != checkList[i][j]) {
      return colList
      return checkList
      sheet.getRange(i + startRow,checkCol).setValue(colList[i]);
      sheet.getRange(i + startRow,timeCol,1,1).setValue(new Date());
    }
    }
}

3 个答案:

答案 0 :(得分:0)

正如我在评论中所说,你有一个索引数组在另一个数组中,所以你的是多维数组,你必须使用2个索引来访问它的值,i = row and j = column

&#13;
&#13;
var checkList = [["Beef"], ["Red"], ["Career"], ["Chicken"], ["Red"], ["Kids"], ["Beef"], ["Red"]];
var colList = [["Beef"], ["Red"], ["Career"], ["Chicken"], ["Red"], ["Kids"], ["Beef"], ["Red"]];
function timeStamp() {
  for(var i = 0; i < colList.length; i++){
  for(var j = 0; j < checkList[i].length; j++){
    if(colList[i][j] != checkList[i][j]) {
            console.log('not equal');
        } else{
        console.log('equal');
      }
    }
  }
}

timeStamp();
&#13;
&#13;
&#13;

答案 1 :(得分:0)

根据你的截图,这很简单。

你的数组不包含字符串,它们包含包含字符串的数组,因此比较是真的,因为两个数组总是不同的,因为js中的数组是对象,当你尝试时比较对象,比较它们的引用,而不是值。

所以你应该创建字符串数组,或者只是在if

的每一边添加[0]

答案 2 :(得分:0)

事实证明,在创建数组的函数末尾添加.String()可以解决问题,并允许它们正确比较。