javascript中的行排序
我有一个解析csv文件的代码,然后给我一个图表,我的问题是我希望它按字母顺序对csv文件的行进行排序,然后开始比较以找到相同的单词,并希望它在没有找到相似性时停止检查下一个单词,因此程序不需要检查9000*9000行javascript中的行排序,javascript,jquery,csv,Javascript,Jquery,Csv,我有一个解析csv文件的代码,然后给我一个图表,我的问题是我希望它按字母顺序对csv文件的行进行排序,然后开始比较以找到相同的单词,并希望它在没有找到相似性时停止检查下一个单词,因此程序不需要检查9000*9000行 <html> <head> <title>Chart</title> <script type="text/javascript" src="jquery.min.js"></script>
<html>
<head>
<title>Chart</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="highcharts.js"></script>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<script>
$(document).ready(function() {
$.ajax({
type: "GET",
url: "uk-4_2_2013.complet.csv",
dataType: "text",
success: function(data) {processData(data);}
});
});
function processData(allText) {
// varriable qui contient toutes les lignes du fichier CSV
var allTextLines = allText.split(/\r\n|\n/);
// liste des lignes
var lignes=new Array();
var nombres=new Array();
// liste d'occurance qui correspond a chaque ligne
var nombre =[];
var x=0;
var y=0;
var inter1;
var inter2;
var i=0;
var j=0;
//on parcours les lignes
for ( i=0; i<allTextLines.length; i++)
{
inetr1 = allTextLines[i].split(';');
if(lignes.indexOf(inetr1[0])<0)
{
lignes[x]=inetr1[0];
nombres[x]=0;
for (j=0; j<allTextLines.length; j++)
{
inetr2 = allTextLines[j].split(';');
if (inetr1[0]==inetr2[0])
{
nombres[x]=nombres[x]+1;
}
}
x=x+1;
}
}
$('#Chart_App').highcharts({
chart: {
type: 'bar'
},
xAxis: {
categories: lignes
},
yAxis: {
title: {
text: 'Apps Downloaded'
}
},
series: [{
data: nombres
}]
});
}
</script>
<div id="Chart_App">
</div>
</body>
</html>
谢谢您已经有了一个数组,其中包含了您的值。您可以按如下方式对其进行排序:
var allTextLines = allText.split(/\r\n|\n/);
for(var i = allTextLines.length;--i;){
allTextLines[i] = allTextLines[i].split(';');
}
//...
// now depending on your keys, sort your Array according to the
// index x where the relevant words are
allTextLines.sort(function(a,b){return (a[x] > b[x]);})
现在,您已经对数组
所有文本行进行了排序,并可以完成其余的工作。正如评论所说,您应该使用数据库对如此大量的数据执行此操作
无论如何,在Javascript中,一旦有了一个包含CSV值的数组,就可以使用该方法按字母顺序对其进行排序
allTextLines.sort();
这将更改原始数组
编辑:正在计算发生次数
我知道您想检查每个单词在CSV中出现的次数。您有一个每行一个单词的CSV,因此allTextLines是一个每元素一个单词的数组。在sort()方法之后,它按字母顺序排列。这是一个想法:
allTextLines.sort();
var lignes = new Array(); // diferent word values
var nombres = new Array(); // their occurrences
var word = allTextLines[0]; // temp word value
var count = 0; // different words counter
var occurrence = 1; // occurrence of the temp word
for ( i=1; i<allTextLines.length; i++) {
if (allTextLines[i] != word){
lignes[count] = word;
nombres[count] = occurrence;
count++;
word = allTextLines[i];
occurrence = 0;
} else {
occurrence++;
}
}
allTextLines.sort();
var lignes=new Array();//不同的词值
var nombres=新数组();//它们的出现
var word=所有文本行[0];//临时字值
变量计数=0;//异字计数器
变量发生率=1;//临时词的出现
对于(i=1;在javascript中插入9000行并稍后对其执行搜索…您应该将其外包给某个数据库;)^..您可以在服务器端使用相同的ajax进行查询。它将更快,使用更少的内存,并提供更好的用户体验。我发布的代码工作正常,问题是浏览器在检查csv文件时崩溃40秒,原因是检查相似性的循环,但它会首先对它们进行排序,这将节省大量时间。只要你继续使用这个方法,你文章中的第一条评论就会是一样的:把所有的行放到一个数组中,然后使用。我不知道怎么做,有人能修改我的代码和文章吗。因为我对这件事一无所知。不管怎样,我从来都不喜欢它。没用也许我错过了什么!!我刚刚复制了你的代码。a
和b
已经是数组值,没有两个数组是从数组所有文本行构建的,可以访问。另外,通过在数组中循环并设置var inetr1
?@Simon感谢您指出输入错误:-p我想您可以自己发现这是一个c&p错误,但谁在乎呢。zazoo24,用此代码再试一次。用正确的索引(存储名称的数组中的索引)替换[x]
。整个代码对于这个拼写错误没有任何意义,这就是为什么我不认为它可能是一个拼写错误,删除了我的否决票。
allTextLines.sort();
var lignes = new Array(); // diferent word values
var nombres = new Array(); // their occurrences
var word = allTextLines[0]; // temp word value
var count = 0; // different words counter
var occurrence = 1; // occurrence of the temp word
for ( i=1; i<allTextLines.length; i++) {
if (allTextLines[i] != word){
lignes[count] = word;
nombres[count] = occurrence;
count++;
word = allTextLines[i];
occurrence = 0;
} else {
occurrence++;
}
}