Comment changer l'ordre dans un tableau multidimensionnel lors du tri d'un sous-tableau en javascript?
F. Vosnim
Lorsque je trie un sous-tableau, comment puis-je changer l'ordre des éléments des autres sous-tableaux en fonction du nouvel ordre du sous-tableau trié:
var op = [];
op[0] = [0, "1:7001", "1:7002", "1:7003", "1:7004", "1:7005"];
op[1] = [1, "1:8001", "1:8002", "1:8003", "1:8004", "1:7005"];
op[2] = ["asw", 3, 5, 1, 10, 2];
op[2] = op[2].slice(0, 1).concat(op[2].slice(1, op[2].length).sort(function(a,b) {
return b - a;
}));
console.log(op);
Le tableau attendu devrait ressembler à:
[0, "1:7004", "1:7002", "1:7001", "1:7005", "1:7003"];
[1, "1:8004", "1:8002", "1:8001", "1:7005", "1:8003"];
[ "asw", 10, 5, 3, 2, 1 ]
Nina Scholz
Vous pouvez prendre un tableau temporaire avec des objets de valeur et d'index pour le tri et mapper les autres tableaux avec les indices du tableau trié.
Cette approche s'appelle le tri avec carte .
var op = [
[0, "1:7001", "1:7002", "1:7003", "1:7004", "1:7005"],
[1, "1:8001", "1:8002", "1:8003", "1:8004", "1:7005"],
["asw", 3, 5, 1, 10, 2]
],
order = op[2] // take op[2] as pattern
.slice(1) // omit first element
.map((v, i) => ({ v, i: i + 1 })) // take value and index with offset
.sort(({ v: a }, { v: b }) => b - a); // sort by value desc
order.unshift({ i: 0 }); // keep first item at index zero
op = op.map(a => order.map(({ i }) => a[i])); // map value at index
console.log(op);
.as-console-wrapper { max-height: 100% !important; top: 0; }