簡體   English   中英

將此類型命名為Error? 可能是范圍錯誤

[英]Name this typeError? Probably scope error

警告:可能不是typeError。 做腳本算法很有趣。 嘗試學習/解決問題的方法=>我注釋掉了未定義的數組。 我不知道為什么會引發錯誤。

 function arrayManipulation(n, queries) { var array = new Array(n).fill(0) var x = 0 var recurring = (argmnt, query, y) => { //problem start here var start = query[0], end = query[1] //problem end somewhere else var newArg = argmnt.map((el, index) =>{ if(index+1 >= start && index+1 <= end){ return query[2] + el }else{ return el } }) console.log(newArg) if ( y < queries.length ){ y += 1 recurring(newArg, queries[y], y) }else{ return newArg } } var solution = recurring(array, queries[x], x) } arrayManipulation(5, [[1, 2, 100], [2, 5, 100], [3, 4, 100]]) 

盡管腳本可以正常運行,並提供所需的輸出。 它在節點中引發stderr或在JS中引發typeerror。 我只想知道為什么。

問題出在你的y變量上。 在檢查y < queries.length首先檢查長度, 然后遞增。

如果數組的長度為3 (如示例所示),則將檢查y是否小於3 ,如果它小於2 ,則通過測試,將其遞增為3 ,然后將queries[3]傳遞給下一個recurring()調用。 不過, queries的最后一個元素是queries[2] 因此, queries[3]undefined並且在函數內部,您嘗試使用query[0]來訪問undefined屬性0 那是錯誤。

 function arrayManipulation(n, queries) { var array = new Array(n).fill(0) var x = 0 var recurring = (argmnt, query, y) => { //problem start here var start = query[0], end = query[1] //problem end somewhere else var newArg = argmnt.map((el, index) =>{ if(index+1 >= start && index+1 <= end){ return query[2] + el }else{ return el } }) console.log(newArg) y += 1 // now is here if ( y < queries.length ){ // was here recurring(newArg, queries[y], y) }else{ return newArg } } var solution = recurring(array, queries[x], x) } arrayManipulation(5, [[1, 2, 100], [2, 5, 100], [3, 4, 100]]) 

您有兩種選擇:要么先增加,然后再進行檢查(如上面的代碼段所示),要么檢查queries.length - 1 ,如下所示:

if ( y < queries.length - 1 ){

另外,還有一些優化。 您不需要y變量。 它基本上只是x但作為參數傳遞。 您可以從recurring()訪問x ,因此您最好使用

 function arrayManipulation(n, queries) { var array = new Array(n).fill(0) var x = 0 var recurring = (argmnt, query) => { //problem start here var start = query[0], end = query[1] //problem end somewhere else var newArg = argmnt.map((el, index) => { if (index + 1 >= start && index + 1 <= end) { return query[2] + el } else { return el } }) console.log(newArg) x += 1 if (x < queries.length) { recurring(newArg, queries[x], x) } else { return newArg } } var solution = recurring(array, queries[x]) } arrayManipulation(5, [ [1, 2, 100], [2, 5, 100], [3, 4, 100] ]) 

這是我從您的腳本中得到的:

{
  "message": "Uncaught TypeError: Cannot read property '0' of undefined",
  "filename": "https://stacksnippets.net/js",
  "lineno": 20,
  "colno": 22
}

由於這部分,這是正常的:

if ( y < queries.length ){
      y += 1
      recurring(newArg, queries[y], y)

您有3查詢。 在某一點上, y等於2

它會增加並等於3 queries[3]不存在,將是undefined (因為,您確實知道數組的第一個索引為0,對嗎?)

然后,在下一次recurring ,您將對其調用query[0] ,但是它是undefined :它將崩潰。

僅此而已;) if條件不好,您if可以了;)

它必須是if ( y < queries.length - 1 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM