我是新手,沒有太多經驗。現在嘗試用JS解決一些作業中的問題,遇到了大麻煩。曾嘗試閱讀一些建議的 QA,但未能找到解決方案。我真誠地尋求幫助,非常感謝任何幫助。
html:
<script>
document.getElementById("autoin").addEventListener("input",doSearch);
function doSearch(){
var ai = document.getElementById("autoin").value;
google.script.run.withSuccessHandler(udAg).getAgent(ai);
}
function udAg(ag){
document.getElementById("agent").value = ag;
M.updateTextFields();
}
</script>
谷歌腳本:
function getAgent(ai){
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Updated");
var ctList = ws.getRange('A2:A17').getValues();
var position = ctList.indexOf(ai);
return position;
}
它總是回傳 -1,即使我用ai直接 string替換了變數'ABC',也就是 A2 中的字串。試圖同時回傳ai和ctList[0],它們似乎是相同的,'ABC'。
console.log(ctList) 顯示 [ [ 'ABC' ], [ 'CDE' ],[ 'EFG' ],... ]
實在想不出解決辦法,真的要麻煩大家幫忙了。謝謝你。
uj5u.com熱心網友回復:
解釋
它回傳 -1,因為您indexOf()在包含子陣列的陣列上運行 an ,因此它無法匹配您的字串。
例如,我可以將您的示例作為最小測驗用例并執行以下操作:
const array = [ [ 'ABC' ], [ 'CDE' ],[ 'EFG' ] ];
console.log(array.indexOf('ABC')); // -1
顯然,它回傳-1是因為它找不到與變數"ABC"內的字串匹配的字串array:"ABC"包含在更深一層的子陣列中。即它包含在array[0],特別是在array[0][0]。
如果你讀了MDN頁面的Array.indexOf(),你會發現,它會試圖找到陣列中的引數相匹配的專案。您正在字串陣列的陣列中查找字串。
這就是為什么嘗試尋找ctList[0]會起作用,因為它是身份匹配:
// returns -1 : correct string value, not an object equality, though
console.log(array.indexOf(['ABC']));
// returns 0: same object that's being looked up
console.log(array.indexOf(array[0]));
解決方案
因此,很難從您的示例中知道您真正要做什么,但看起來您實際上想要查找包含字串的陣列的位置,而不是字串的位置。如果是這種情況,并且每個子陣列總是只有一個元素,這將適用于我的示例:
array.map(subarray => subarray[0]).indexOf('ABC'); // 0: YAY!
或者對于您的情況:
ctList.map(subarray => subarray[0]).indexOf(ai);
uj5u.com熱心網友回復:
在 getValues() 之后嘗試添加 flat():
function getAgent(ai) {
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Updated");
var ctList = ws.getRange('A2:A17').getValues().flat();//added flat
var position = ctList.indexOf(ai);
return position;
}
即使單行或單列作為二維陣列回傳,索引也不適用于二維陣列。您可以通過其他方式(例如 map)執行與 flat() 相同的操作。
uj5u.com熱心網友回復:
這部分代碼在腳本標簽之外:
function getAgent(ai){
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Updated");
var ctList = ws.getRange('A2:A17').getValues();
var position = ctList.indexOf(ai);
return position;
}
...順便說一下 -1 是 indexOf 函式的正確值,這意味著搜索到的值不是陣列的一部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/325145.html
