簡體   English   中英

如何對所有行的每一列對數組進行多重排序? (JavaScript的)

[英]How do i multiple sort an array per column for all lines ? (JavaScript)

我創建了一個var行來生成csv。 我想根據2列對內容進行排序:DATE和TIME。

DATE;TIME;ID;FACE;TOTAL;VAL1;VAL2;
07/05/2019;14:11:07;3234;0.00000038;2.00;-0.00000038;0;
07/05/2019;**16:11:07**;1779;0.00000019;2.00;-0.00000019;0;
07/05/2019;14:11:06;4120;0.00000304;2.00;0.00000304;1;
26/05/2019;**06:32:39**;2167;0.00000015;2.00;-0.00000015;0;
26/05/2019;06:32:38;5152;0.00000015;2.00;0.00000015;1;
**07/05/2019**;14:11:18;7949;0.00000038;2.00;-0.00000038;0;

預期結果:

DATE;TIME;ID;FACE;TOTAL;VAL1;VAL2;
07/05/2019;14:11:06;4120;0.00000304;2.00;0.00000304;1;
07/05/2019;14:11:07;3234;0.00000038;2.00;-0.00000038;0;
07/05/2019;14:11:18;7949;0.00000038;2.00;-0.00000038;0;
07/05/2019;16:11:07;1779;0.00000019;2.00;-0.00000019;0;
26/05/2019;06:32:38;2167;0.00000015;2.00;-0.00000015;0;
26/05/2019;06:32:39;5152;0.00000015;2.00;0.00000015;1;
var lines = rows.split('\n');
for(var loop = 0; loop < lines.length; loop++){
if (parseFloat(prev) > 0){val2= 1;}else {val2 = 0;}
(....)
lines[loop] = lines[loop].replace(/(\r\n|\n|\r|\s+)/gm,"").trim() + val1 + ";" + val2 + ";";
}
rows = lines.join('\n');

因為使用數組行很復雜,所以我在考慮使用索引數組屬性。 但是,行不被視為數組,因此forEach不可用。

var result = lines.reduce(function(r, a) {
        a.forEach(function(s, i) {
        var key = i === 0 ? 'headers' : 'col' + i;              
        r[key] || (r[key] = []); 
        r[key].push(s);
        });
        return r;
        }, {});

function compare(r,x,col) {
    if (r[x].col< r[x+1].col) return -1;
    if (r[x].col > r[x+1].col) return 1;
    return 0;
}
for(var loop = 0; loop < r.length; loop++){
        result.sort(compare(r,loop,col1));
        result.sort(compare(r,loop,col2));
}

如何應用雙重排序標准並按此數組中的預期獲取行?

我的代碼用於google chrome。 某些功能(例如原型)不起作用(或過濾器...)

您可以執行以下操作:

 const data = "07/05/2019;14:11:07;3234;0.00000038;2.00;-0.00000038;0;\\n07/05/2019;16:11:07;1779;0.00000019;2.00;-0.00000019;0;\\n07/05/2019;14:11:06;4120;0.00000304;2.00;0.00000304;1;\\n26/05/2019;06:32:39;2167;0.00000015;2.00;-0.00000015;0;\\n26/05/2019;06:32:38;5152;0.00000015;2.00;0.00000015;1;\\n07/05/2019;14:11:18;7949;0.00000038;2.00;-0.00000038;0;" // Convert to array of arrays let dataArrays = data.split('\\n').map(x => x.split(';')) let extractDate = arr => { let dateParts = arr[0].split('/') // get the date parts array let [dd,mm,yyyy] = dateParts // get the actual dd/mm/yyyy let [date, time] = arr // we only care about the date time for the date return new Date(`${mm}/${dd}/${yyyy} ${time}`) // return valid date for the sort } // perform the actual sort let result = dataArrays.sort((a,b) => extractDate(a) - extractDate(b)) console.log(result.map(x => x.join(';')).join('\\n')) // join back to same format 

想法是將dd/mm/yyyy轉換為每行的有效日期,然后使用Array.sort對行進行排序。 對行進行排序后,您可以通過Array.join等將其轉換回一個字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM