警告:可能不是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;
虽然脚本运行正常但给我想要的输出。它在JS中抛出节点或类型错误中的stderr。我只是想知道为什么会这样。
答案 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
。
它将递增并等于3
。
queries[3]
不存在,将为undefined
。 (因为,你知道数组的第一个索引是0,对吗?)
然后,在下一个recurring
中,您会在其上调用query[0]
,但它是undefined
:它会崩溃。
这就是全部;)你if
条件不好;)
必须是if ( y < queries.length - 1 )