Javascript RangeError:一个环境中的数组长度无效,但另一个环境中的数组长度无效
我对Javascript比较陌生,所以如果有人告诉我发生了什么/为什么,我会非常感激 我正在经历coderfight上的编码器挑战。我的代码在JS fiddle中工作,但在代码斗争中失败,出现了一个错误:Javascript RangeError:一个环境中的数组长度无效,但另一个环境中的数组长度无效,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我对Javascript比较陌生,所以如果有人告诉我发生了什么/为什么,我会非常感激 我正在经历coderfight上的编码器挑战。我的代码在JS fiddle中工作,但在代码斗争中失败,出现了一个错误: "RangeError: Invalid array length at matrixElementsSum (file.js on line 25:17) at _runyckrx (file.js on line ?:28) at getUserOutputs (file.js on li
"RangeError: Invalid array length
at matrixElementsSum (file.js on line 25:17)
at _runyckrx (file.js on line ?:28)
at getUserOutputs (file.js on line ?:30)
at Object.<anonymous> (file.js on line ?:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:148:18)"
将是:
[[x, 1, 1, 2],
[x, 5, x, x],
[x, x, x, x]]
然后找到最终数组中每个值的和
matrix = [[0,1,1,2],
[0,5,0,0],
[2,0,3,3]]
function matrixElementsSum(matrix) {
// Calculate the width and height of the Array
var w = matrix.length || 0;
var h = matrix[0] instanceof Array ? matrix[0].length : 0;
// In case it is a zero matrix return empty array.
if(h === 0 || w === 0) { return []; }
var i, j, t = [];
// Loop through every item in the outer array (height)
for(i=0; i<h; i++) {
// Insert a new row (array)
t[i] = [];
// Loop through every item per item in outer array (width)
for(j=0; j<w; j++) {
// Save transposed martix.
t[i][j] = matrix[j][i];
}
}
// rows are now cols - if we come across a 0 the remaining values
//dont need to be there
for(var i = 0; i < t.length; i++){
t[i].length = t[i].indexOf(0);
}
//concat multi array to single array
var merged = [].concat.apply([], t);
// get sum of flattened array
var totalCost = merged.reduce(function(acc, val) {
return acc + val;
}, 0);
return totalCost
}
matrixElementsSum(matrix)
matrix=[[0,1,1,2],
[0,5,0,0],
[2,0,3,3]]
函数矩阵素和(矩阵){
//计算阵列的宽度和高度
var w=矩阵长度| | 0;
var h=数组的矩阵[0]实例?矩阵[0]。长度:0;
//如果是零矩阵返回空数组。
如果(h==0 | | w==0){return[];}
var i,j,t=[];
//循环遍历外部数组中的每个项(高度)
对于(i=0;i而言,问题最有可能出现在这里:
for(var i = 0; i < t.length; i++){
t[i].length = t[i].indexOf(0);
}
您没有看到JSFIDLE中的问题,因为您的矩阵
在每一列中都有0
(t
数组只是矩阵
的换位)。当您将程序提交给CoderFight时,他们可能正在使用不同的矩阵对其进行测试,包括一些列中没有零的矩阵。然后会遇到错误。它与环境无关,只是与输入数据有关。错误发生在哪一行?这非常有效,谢谢!您知道在某些环境中为什么会发生错误吗onments-1不会导致错误?可能您在其他环境的所有列中都有一个0
。[].length=-1
在我尝试的每个浏览器中都会出现一个错误:Chrome、Safari、FirefoxJSFIDLE在您的浏览器中运行代码。您使用的浏览器是什么?是否有指向fiddle的链接?我有。因为jsfiddle在浏览器中运行,错误来自节点服务器,我想知道这本身是否就是问题所在。
for(var i = 0; i < t.length; i++){
t[i].length = t[i].indexOf(0);
}
for (var i = 0; i < t.length; i++) {
var index = t[i].indexOf(0);
if (index != -1) {
t[i].length = index;
}
}