Javascript 我试图筛选空值。但是,TypeError:无法读取空值的属性“length”

Javascript 我试图筛选空值。但是,TypeError:无法读取空值的属性“length”,javascript,arrays,Javascript,Arrays,这是codewars中的一个kata。有一个数组。如果按数组的长度排序,你会看到它们的长度值是连续的。但是缺少一个数组。我试图编写一个方法,返回缺少的数组的长度。 我的方法可以得到缺少的数组的真实长度,但是我得到了一条关于null值的错误消息。现在,我尝试过滤null值 TypeError:无法在getLengthOfMissingArray处读取null的属性“length” 一开始 看它 at/runner/frameworks/javascript/cw-2.js:179:21 承诺执行

这是codewars中的一个kata。有一个数组。如果按数组的长度排序,你会看到它们的长度值是连续的。但是缺少一个数组。我试图编写一个方法,返回缺少的数组的长度。 我的方法可以得到缺少的数组的真实长度,但是我得到了一条关于null值的错误消息。现在,我尝试过滤null值

TypeError:无法在getLengthOfMissingArray处读取null的属性“length” 一开始 看它 at/runner/frameworks/javascript/cw-2.js:179:21 承诺执行 由遗嘱执行人决定 在新的承诺下 至少描述 at Object.handleError 在ContextifyScript.Script.runInThisContext 在Object.exports.runInThisContext

我想你需要使用!arrayOfArrays而不是arrayOfArrays==,像这样

function getLengthOfMissingArray(arrayOfArrays) {
  var str=[];
  if (!arrayOfArrays)
    return 0;
  var Long=arrayOfArrays.length;
  for(var i=0;i<Long;i++){
    if (!arrayOfArrays[i])
      return 0;
    else
      str.push(arrayOfArrays[i].length);
  }
  str.sort(function(a,b){return a>b?1:-1});
  var sum=0,n=str.length;
  var totol=((str[0]+str[n-1])/2)*(n+1);
  for(var i=0;i<str.length;i++){
    sum=sum+str[i];
  }
  return totol-sum;
}

我没有答案。但是你的代码看起来很复杂:

 var mainarray=[]; // your array containing arrays
var left=mainarray.map(typeof el=="object"?el.length:0).sort().reduce((num,length)=>num+1==length?num+1:num,-1)+1;//if your first array length is 1, -1 has to be replaced with 0.
获取每个长度,如果它不是长度为0的数组,则按升序排序并向上计数。如果缺少某个位置,请保持该值

例如:

第179行是什么?我还有一个问题。我试过这样做:var a=[];如果一个console.logture else console.logfalse;它的结果是真的,为什么?这是因为你创建了一个空数组,它是一个对象,因此不是空的。真的!经过你的解释,我明白了。非常感谢。你的代码非常聪明实用。现在我对箭头函数有了更多的经验。我需要更多的练习才能得到它。非常感谢。
 var mainarray=[]; // your array containing arrays
var left=mainarray.map(typeof el=="object"?el.length:0).sort().reduce((num,length)=>num+1==length?num+1:num,-1)+1;//if your first array length is 1, -1 has to be replaced with 0.