我试图过滤空值。但是,TypeError:无法读取属性' length'为null

时间:2017-01-18 15:26:01

标签: javascript arrays

它是代码战中的kata。它是一个数组数组。如果你按照它们的长度排序数组,你会看到它们的长度值是连续的。但是缺少一个数组.I试图写一个方法,返回缺少数组的长度。 我的方法可以获得缺少数组的真实长度,但是我收到一条关于null值的错误消息。现在,我试图过滤空值。

  

TypeError:无法读取属性'长度'在getLengthOfMissingArray中为null        一开始       在它         在/runner/frameworks/javascript/cw-2.js:179:21       在Promise._execute       在Promise._resolveFromExecutor       在新的承诺       在描述               at Object.handleError           在ContextifyScript.Script.runInThisContext中       在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 个答案:

答案 0 :(得分:1)

我认为你需要使用!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;
}

答案 1 :(得分:0)

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

 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