一共两万多行数据,我用二分法发现在读取 15075 行数据的时候就会报栈溢出,但是这行数据并没有什么不同。代码如下:
中间的逻辑判断部分比较复杂?大佬无视就好。主要看我的递归哪里错了?
function getdata(line)
{
i++;
if (typeof line =='string'){//判断是否为字符串
var dataarray = line.split(',');
if (person.hasOwnProperty(dataarray[4]+dataarray[7]) == false){//判断是否字符串已存在,key 为 brand+x
person[dataarray[4]+dataarray[7]] = dataarray;
k ++;
}
else{//如果已存在
if (real_length(String(dataarray)) > real_length(String(person[dataarray[4]+dataarray[7]]))){//比较字符串的非空长度,后者比前者大则替代
l++;
fWriteError.write(person[dataarray[4]+dataarray[7]]+os.EOL)//将淘汰的字符串记录下来
person[dataarray[4]+dataarray[7]] = dataarray;
}
else if(real_length(String(dataarray)) == real_length(String(person[dataarray[4]+dataarray[7]]))){//比较字符串的非空长度,如果两者相等
if (jmz.GetLength(String(dataarray[6])) > jmz.GetLength(String(person[dataarray[4]+dataarray[7]][6])) ){//比较字符串中 addr 字段的字符数
console.log(dataarray[6]);
console.log(person[dataarray[4]+dataarray[7]][6]);
person[dataarray[4]+dataarray[7]] = dataarray;
l++;
}
else{
l++
}
}
else{
l++;
}
}
}
if(i<15705)
{
getdata(dataArrayAll[i])
}
}
getdata(dataArrayAll[0]);
中间的逻辑判断部分比较复杂?大佬无视就好。主要看我的递归哪里错了?
function getdata(line)
{
i++;
if (typeof line =='string'){//判断是否为字符串
var dataarray = line.split(',');
if (person.hasOwnProperty(dataarray[4]+dataarray[7]) == false){//判断是否字符串已存在,key 为 brand+x
person[dataarray[4]+dataarray[7]] = dataarray;
k ++;
}
else{//如果已存在
if (real_length(String(dataarray)) > real_length(String(person[dataarray[4]+dataarray[7]]))){//比较字符串的非空长度,后者比前者大则替代
l++;
fWriteError.write(person[dataarray[4]+dataarray[7]]+os.EOL)//将淘汰的字符串记录下来
person[dataarray[4]+dataarray[7]] = dataarray;
}
else if(real_length(String(dataarray)) == real_length(String(person[dataarray[4]+dataarray[7]]))){//比较字符串的非空长度,如果两者相等
if (jmz.GetLength(String(dataarray[6])) > jmz.GetLength(String(person[dataarray[4]+dataarray[7]][6])) ){//比较字符串中 addr 字段的字符数
console.log(dataarray[6]);
console.log(person[dataarray[4]+dataarray[7]][6]);
person[dataarray[4]+dataarray[7]] = dataarray;
l++;
}
else{
l++
}
}
else{
l++;
}
}
}
if(i<15705)
{
getdata(dataArrayAll[i])
}
}
getdata(dataArrayAll[0]);