2017-06-27 1 views
0

Ich habe zwei Arrays:Vergleichen Sie zwei Arrays eins nach dem anderen und neuen Array Schliesser mit Hilfe von Javascript zu entwickeln

colors1 = ['green', 
'', 
'red', 
'', 
'black']; 

colors2 = ['purple', 
yellow, 
'red', 
'']; 


console.log(result); 
    [ 
    ['green', 'purple'], 
    [null, 'yellow'], 
    'black', null 
    ]; 

ich neue Array vornehmen müssen result mit Bedingungen.

  1. result enthält Array, das jedes Element zwei Elemente enthält;
  2. erstes Element = Farbe von colors1, zweites = Farbe von colors2;
  3. Wenn die Farben gleich sind, werden sie übersprungen (nicht in result enthalten);
  4. Wenn keine Farbe im Array vorhanden ist, dann setzen wir dieses Element null.
  5. Wir müssen nur funktionale Programmierung mit unveränderlichen Objekten verwenden.

Ich glaube, ich sollte:

  1. Länge vergleichen;
  2. make big.reduce();

Aber habe keine Ahnung, wie es geht. Vielen Dank im Voraus. das ist ganz richtig

+0

Können Sie es mit einer einfachen Schleife tun, ohne Unveränderlichkeit? – Bergi

+0

[Link des Projekts auf github] (https://github.com/igortsybin/JS/tree/master/src/Hexlet/Async.Project) –

+0

@Bergi Nope) Nur Unveränderlichkeit. Das ist der springende Punkt.) –

Antwort

1

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)); 
Verwandte Themen