Javascript RangeError:一个环境中的数组长度无效,但另一个环境中的数组长度无效

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

我对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 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;
    }
}