开发者问题收集

我试图过滤空值。但是,TypeError:无法读取空的属性“长度”

2017-01-18
674

这是 codewars 中的一个 kata。有一个数组数组。如果按长度对数组进行排序,你会发现它们的长度值是连续的。但是缺少一个数组。我试图编写一个方法,返回缺少的数组的长度。 我的方法可以获取缺少的数组的真实长度,但我收到有关空值的错误消息。现在,我已尝试过滤空值。

TypeError: Cannot read property 'length' of null at getLengthOfMissingArray at begin at it at /runner/frameworks/javascript/cw-2.js:179:21 at Promise._execute at Promise._resolveFromExecutor at new Promise at describe at Object.handleError at ContextifyScript.Script.runInThisContext at Object.exports.runInThisContext

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;
}
2个回答

我认为您需要使用 !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;
}
Rik Lewis
2017-01-18

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

 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,然后按升序排序并计数。如果缺少一个位置,则保持该值。

示例: http://jsbin.com/ribaxoveyo/edit?console

Jonas Wilms
2017-01-18