aber haben keine Ahnung, wie es
glaube ich nicht zu tun, da Sie in der Lage sind, genau zu beschreiben, was passieren soll ... Haben Sie mit einem „normalen versuchten Start "Schleife ohne sich Gedanken über reduce
und Unveränderlichkeit zuerst?
Wenn ich Ihre Anforderungen und Fragen an Code übersetzen, ist das, was ich bekommen:
const colors1 = ['green', '', 'red', '', 'black'];
const colors2 = ['purple', 'yellow', 'red', '' ];
const colorPairs = (set1, set2) => {
const biggest = set1.length >= set2.length ? set1 : set2;
return biggest.reduce(
(colors, _, i) => {
const c1 = set1[i] || null;
const c2 = set2[i] || null;
if (c1 !== c2) colors.push([c1, c2]);
return colors;
}, []);
};
console.log(colorPairs(colors1, colors2))
Nun, würde ich sehr daran interessiert sein, die Begriffe, die hier verwendet werden, Sie don‘ ich verstehe nicht. Bitte lassen Sie mich in den Kommentaren wissen ...
Ich denke, ich sollte: (1) Länge vergleichen; (2) mache am größten.reduzieren();
const biggest = set1.length >= set2.length ? set1 : set2;
return biggest.reduce(/* ... */, []);
erste Element = Farbe von colors1, zweite = Farbe von colors2
const c1 = set1[i];
const c2 = set2[i];
, wenn die Farben gleich sind, dann sie übersprungenen sind (nicht im Ergebnis enthalten)
if (c1 !== c2) colors.push([c1, c2]);
Wenn keine Farbe im Array ist, dann setzen wir null.
const c1 = set1[i] || null;
const c2 = set2[i] || null;
// ^-- "" or undefined is replaced by null
Wir brauchen nur die funktionale Programmierung mit unveränderlichen Objekten zu verwenden.
Wir kehren ein neues Array jedes Mal, wenn wir colorPairs
laufen und berühren Sie nicht die Eingabefelder. Wenn Sie das Ergebnis wollen eigentlich unveränderlich sein, würde ich in einer Bibliothek wie Immutable.js suchen vorschlagen und wandeln das Ergebnis ein List
:
const result = List(colorPairs(colors1, colors2));
Können Sie es mit einer einfachen Schleife tun, ohne Unveränderlichkeit? – Bergi
[Link des Projekts auf github] (https://github.com/igortsybin/JS/tree/master/src/Hexlet/Async.Project) –
@Bergi Nope) Nur Unveränderlichkeit. Das ist der springende Punkt.) –