Airscript 1.0中用严格相等的两个数组经过find操作输出完全不同的结果
📌 | let file = KSDrive.openFile("https://www.kdocs.cn/l/***********") let userTable = file.Application.Sheets("下拉列表").Range("S2:T" + getLastRow("T", file.Application.Sheets("下拉列表"))).Value2 const data = [["袁杰", "699137023"], ["谢欣雨", "426690345"], ["罗鹏禧", "26010128"], ["杨云龙", "525520738"], ["王壮", "204965085"], ["郝岩", "21408887"], ["马贤鉴", "387424514"], ["封治虎", "304383325"], ["刘广根", "21802757"], ["黄巍", "303668736"], ["杜嘉欣", "303522614"], ["龚财全", "262845464"], ["蒋煜治", "316311955"], ["黄淦星", "229617165"], ["袁凤霞", "692022919"], ["涂灿辉", "293765139"], ["周成英", "440497131"], ["荀励治", "340588799"], ["秦尉天", "404236257"], ["张兆宇", "895531118"], ["向慧媚", "325748662"], ["杜嘉欣", "890150175"], ["罗鹏禧", "660863214"], ["谢欣雨", "243789846"]]; console.log(arraysAreEqual(data,userTable)) //返回true,表明data和userTable这两个数组严格相等 console.log(getUserName()) //getUserName函数根据当前账号的id查询表格得到对应的姓名 //getUserName函数中用data数组find返回正确结果“王壮” //但是当getUserName函数中用userTable数组find返回不正确结果“袁杰”,data和userTable是严格相等的但是得到结果完全不一样 function getUserName() { const result = userTable.find(person => person[1] === Application.UserInfo['id']); return result ? result[0] : "未找到对应姓名"; } function getLastRow(colAB, filesht) { let end = filesht.UsedRange.RowEnd let col = filesht.Range(colAB + "1:" + colAB + end) let lastRow = 1 for (i = end; i > 0; i--) { if (col.Rows(i).Value !== "" && col.Rows(i).Value !== null) { lastRow = i break } } return lastRow } //以下函数用来比较两个二维数组是否严格相等,包括每一个元素的类型和数值 function arraysAreEqual(arr1, arr2) { if (!Array.isArray(arr1) || !Array.isArray(arr2)) { return false; // 如果不是数组,返回 false } if (arr1.length !== arr2.length) { return false; // 数组长度不同,返回 false } for (let i = 0; i < arr1.length; i++) { // 检查类型是否相同 if (typeof arr1[i] !== typeof arr2[i]) { return false; } if (Array.isArray(arr1[i]) && Array.isArray(arr2[i])) { // 如果元素是数组,递归比较 if (!arraysAreEqual(arr1[i], arr2[i])) { return false; } } else if (arr1[i] !== arr2[i]) { // 如果元素不是数组且值不相等,返回 false return false; } } return true; // 如果所有元素和值都相等,返回 true } |
userTable是从另一个在线表格中读取的二维数组,这个数组包含了姓名和用户id的集合。data是手动定义的二维数组,与userTable完全一致。arraysAreEqual函数用来比较两个二维数组是否严格相等,包括每一个元素的类型和数值,arraysAreEqual(data,userTable)返回true,表明这两个数组严格相等。
getUserName函数是通过当前用户id返回姓名的函数,在这个函数中如果使用data数组find方法,返回结果与预期一致。但是getUserName函数中如果使用userTable数组返回“袁杰”,即二维数组的第一项,与预期不一致。
data和userTable在严格相等的情况下还是返回了不一样的结果,不太能理解。