JS 45行代码 不是最简单的,但是如果没有思路的话,可以看看,帮助理解
var i = 0 , title = {} , str = {} , sum = {} , num1 = 0 , arr_1 = {}
while(line=readline()){
var lines = line.split(' ')
var a = lines[0]
for(var j=0 ; j<=i ; j++){ //这个for循环是将完全相同的数据删除,只保留第一次出现
if(a != title[j]){ //将每一行数据后面加上一个代表数量的值,并且全都赋值为‘1’
if( i == j ){
title[i] = a
str[i] = a.split('\\')[a.split('\\').length-1].substring(a.split('\\')[a.split('\\').length-1].length-20) + ' ' + 1
i++
break
}
}
else if(a == title[j])
break
}
}
for(var z=0 ; z<i ; z++){ //这个for循环是为了查询所有文件名和行号相同但是路径不同的数据
for(var num=z+1 ; num<i ; num++){ //并且此时的数据只保存最后一条下划线后面的数据
if( str[z].split(' ')[0] == str[num].split(' ')[0] && str[z].split(' ')[1] == str[num].split(' ')[1]){
sum[num1] = num //如果文件名和代码行数相同,数量值+1
num1++
var v = parseInt(str[z].split(' ')[2])
v++
str[z] = str[z].split(' ')[0] + ' ' + str[z].split(' ')[1] + ' ' + v
}
}
}
var num_f = 0
for(var num2=i-1 ; num2>=0 ; num2--){ //这个for循环是将所有文件名和行号相同但是路径不同的数据只保留第一个,其他的删除
for(var num3=num2-1 ; num3>=0 ; num3--){
if(str[num2].split(' ')[0] == str[num3].split(' ')[0] && str[num2].split(' ')[1] == str[num3].split(' ')[1])
break
else if(num3 == 0){
arr_1[num_f] = str[num2]
num_f++
}
}
}
arr_1[num_f] = str[0] //因为上面的for循环不会将str数组的第一个值赋给数组arr_1,因此这里手动赋值
for(var num2=7 ; num2>=0 ; num2--)
//因为要输出最后八条数据,上面的for循环是倒序遍历,也是倒序赋值,因此这里从下表为7开始输出,输出到下表为0为止,一共八条
if(arr_1[num2]) //先进行判断,在输出,因为如果数据不够八条不判断的话,会输出undefined
console.log(arr_1[num2])