根据特定列对csv进行排序

时间:2015-08-31 07:16:02

标签: javascript sorting csv

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

代码:

      $.each(exportArray, function (index, value) {
csvData.push(x[index] + "," + y[index] + "," + d[index] + "," + z[index]  + ","+ a[index] + "," + e[index] + "," + b[index] + "," + c[index]);
        });
csvData.sort();

         csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(output);

      $(this)
.attr({
    'download': filename,
    'href': csvData,
    'target': '_blank'
});

例如:csvData.sort()根据第一列默认排序数据。我希望按照第三列排序,即d[index]。 我试过这个csvData.sort(sort_by(d[index]));并且它无效。

我还有一个问题。因为我将数据导出到csv。如果我有三个值d[index],请从服务器d[index]="cat,dog,bat"开始。它将显示在3个相邻的列中。我希望它在同一列中。我可以用逗号将分隔符更改为其他内容。

代码:

       csvData.push(x[index] + "," + y[index] + "," + d[index] + "," + z[index]  + ","+ a[index] + "," + e[index] + "," + b[index] + "," + c[index]);

2 个答案:

答案 0 :(得分:0)

您必须编写自定义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;
    }
}

答案 1 :(得分:0)

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

x

然后您可以使用以下代码轻松地对数据进行排序,例如function compare(a, b) { if (a.x < b.x) return -1; if (a.x > b.x) return 1; return 0; } objects.sort(compare); 属性:

objects[i].x

然后,您将对数组进行排序,并可以使用例如sheet.Range[sheet.Cells[1,1], sheet.Cells[40,40]].Value = result; 来访问各个属性。