Ich versuche, eine effiziente Möglichkeit zu finden, alle möglichen zusammenhängenden String-Verkettungen aus einem Array von String-Arrays zu sammeln, mit Ausnahme von Strings mit doppelten Teilen. Beispiel:Wie werden alle möglichen zusammenhängenden String-Verkettungen aus einem Array von String-Arrays gesammelt?
var arr = [
["pq","bcd"], ["l", "ffnn", "xyz"], ["hm", "ffnn","ij"], ["ab","def","u","eeff"]
];
function f(a) {
var t = [];
a[a.length-4].forEach(function(i) {
a[a.length-3].forEach(function(j) {
if (j !== i) (
a[a.length-2].forEach(function(k) {
if (k !== j && k !== i) (
a[a.length-1].forEach(function(l) {
if (l !== k && l !== j && l !== i)
(t.push(i+","+j+","+k+","+l));
})
)
})
)
})
});
return t;
};
console.log(f(arr));
, wo das Ergebnis sein wird
["pq, l, hm, ab"],
["pq, l, hm, def"],
//...and so on...
["bcd, xyz, ij, u"],
["bcd, xyz, ij, eeff"]
(dass während Hinweis, zB ["pq, ffnn, ffnn, ab"]
eine mögliche Kombination ist, wird es im Ergebnis nicht enthalten, da es enthält ein Duplikat).
Das Problem ist, dass ich die Länge des Arrays kennen und mehrere verschachtelte Funktionen entsprechend schreiben muss. Aber ich brauche eine Funktion, die diese Länge automatisch erkennt und das gewünschte Ergebnis zurückgibt. Vielleicht ist es möglich, die obige Funktion mittels Rekursion neu zu schreiben, aber ich bin mir nicht sicher, ob dies der beste Ansatz für ein solches Problem wäre.
Side note: Verwenden von 'map', wenn Sie nicht die Rückkehr verwenden Wert ist sinnlos und ein bisschen mehr Arbeit (es schafft ein Array für Sie, das Sie dann einfach wegwerfen). Verwenden Sie "forEach", wenn Sie den Rückgabewert nicht verwenden. –
Es wird immer nur zwei Dimensionen geben? Z. B. ein Array, das Arrays enthält? Kein Array mit Arrays von Arrays? –
@TJCrowder: Ja, ich werde versuchen, es so einfach wie "Array mit Arrays von Strings" zu halten. –