将此类型命名为错误?可能是范围错误

时间:2018-05-12 04:56:49

标签: javascript arrays typeerror

警告:可能不是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]])
&#13;
&#13;
&#13;

虽然脚本运行正常但给我想要的输出。它在JS中抛出节点或类型错误中的stderr。我只是想知道为什么会这样。

2 个答案:

答案 0 :(得分:1)

问题在于您的for (int i = 0; i < NUM_LEDS; i++) 变量。在您的支票y中,您首先检查长度,然后增量。

如果您的数组的长度为y < queries.length(与您的示例中一样),您将检查3是否小于y,如果它是3,它通过测试,增加到2,然后将3传递给下一个queries[3]调用。但recurring()的最后一个元素是queries。因此queries[2]queries[3]并且在函数内部,您尝试undefined访问query[0]的属性0。这是错误。

undefined

您有两种选择:首先递增然后进行检查(如上面的代码段所示),或者检查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访问x,因此您可以使用 it

recurring()

答案 1 :(得分:0)

这是我从你的剧本中得到的:

{
  "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

它将递增并等于3queries[3]不存在,将为undefined。 (因为,你知道数组的第一个索引是0,对吗?)

然后,在下一个recurring中,您会在其上调用query[0],但它是undefined:它会崩溃。

这就是全部;)你if条件不好;)

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