我试图过滤空值。但是,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,然后按升序排序并计数。如果缺少一个位置,则保持该值。
Jonas Wilms
2017-01-18