Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据特定列对csv进行排序_Javascript_Sorting_Csv - Fatal编程技术网

Javascript 根据特定列对csv进行排序

Javascript 根据特定列对csv进行排序,javascript,sorting,csv,Javascript,Sorting,Csv,嗨,我正在使用javascript将数据导出到csv文件。我需要根据特定的列索引对数据进行排序 代码: 例如:csvData.sort()是按照默认的第一列对数据进行排序。我想按第三列排序,即按d[index]排序。 我尝试了这个csvData.sort(sort_by(d[index])并且它不工作 我还有一个问题。因为我正在将数据导出到csv。现在,如果我有三个值,如d[index]=“cat,dog,bat”,则从服务器进入d[index]。它将显示在3个相邻的列中。我想把它放在同一列。我

嗨,我正在使用javascript将数据导出到csv文件。我需要根据特定的列索引对数据进行排序

代码:

例如:
csvData.sort()
是按照默认的第一列对数据进行排序。我想按第三列排序,即按
d[index]
排序。 我尝试了这个
csvData.sort(sort_by(d[index])并且它不工作

我还有一个问题。因为我正在将数据导出到csv。现在,如果我有三个值,如
d[index]=“cat,dog,bat”
,则从服务器进入
d[index]
。它将显示在3个相邻的列中。我想把它放在同一列。我可以把分隔符从逗号改成别的吗

代码:


您必须编写一个自定义的
compare
函数

// The following function is used to sort on the basis of the third element
function compareByThird(a, b) {
    var aArr = a.split(',');
    var bArr = b.split(',');
    return aArr[2] - bArr[2];
}

csvData.sort(compareByThird);
如果第三列是数值,则该选项有效。 如果不是(例如字符串),则需要使用以下代码:

// The following function is used to sort on the basis of the third element
function compareByThird(a, b) {
    var aArr = a.split(',');
    var bArr = b.split(',');
    if (aArr[2] < bArr[2]) {
        return -1;
    } else if (aArr[2] > bArr[2] {
        return 1;
    } else {
        return 0;
    }
}
//以下函数用于根据第三个元素进行排序
函数比较器比特(a,b){
var aArr=a.split(',');
var-bArr=b.split(',');
if(aArr[2]bArr[2]{
返回1;
}否则{
返回0;
}
}

在将数据写入CSV之前,您需要对数据进行排序。如果数据位于对象数组中,而不是分散在每个属性的一个数组中,则更容易做到这一点。要实现这一点,您可以在创建或读取数据时将数据放入对象中,也可以使用如下代码段进行转换:

var count = x.length;
var objects = new Array(count);
for(i=0; i++; i<count) {
    objects[i] = {
        x: x[i],
        y: y[i],
        d: d[i],
        z: z[i],
        a: a[i],
        e: e[i],
        b: b[i],
        c: c[i],
    };
}

然后您将对数组进行排序,并可以访问单个属性,例如
对象[i].x

大家好,谢谢你们的输入。@Davide-您能告诉我比较函数中的a和b是什么吗?它是第一列和第二列吗?基本上是在我的结构x[index]中是第一列,它将有n个值。类似地,Y[index]是第二列,在csv文件中有值等。现在,如果我只键入csv.sort(),第一列值将被排序,其余列值将相应地填充。如果我需要根据任何其他列对其排序,例如:Y[index]我该怎么办?到目前为止,在我们任何人发布的代码中,没有任何名称
CSV
,因此我不可能理解您在说什么。我提供的解决方案根据您选择的列进行排序-如果您不想要
x
,只需在
比较
函数中将代码更改为其他内容即可de>a
b
变量是两个不同的行,通过
sort
作为输入发送到
compare
compare
应返回
1
如果
a
应被视为大于
b
-1
如果情况相反,如果它们相等,则根据。
// The following function is used to sort on the basis of the third element
function compareByThird(a, b) {
    var aArr = a.split(',');
    var bArr = b.split(',');
    if (aArr[2] < bArr[2]) {
        return -1;
    } else if (aArr[2] > bArr[2] {
        return 1;
    } else {
        return 0;
    }
}
var count = x.length;
var objects = new Array(count);
for(i=0; i++; i<count) {
    objects[i] = {
        x: x[i],
        y: y[i],
        d: d[i],
        z: z[i],
        a: a[i],
        e: e[i],
        b: b[i],
        c: c[i],
    };
}
function compare(a, b) {
  if (a.x < b.x) return -1;
  if (a.x > b.x) return 1;
  return 0;
}

objects.sort(compare);