2016-03-30 2 views
2

ich einen Code erstellt haben, die die Farbe red als „on“ und die Farbe blue als „off“, diese auf der und aus der erkennt werden dann in ein leeres Array namens initial "geschoben", dies kann unten gesehen werden.Wie bestimmte Teile in einem Array zu nehmen und sie in ein anderes Zeichen umwandeln in Javascript

if (red > blue){ 
    initial.push("on"); 
    console.log(initital); 
    console.log(initial.length); 
    return true; 
} 

else { 
    initial.push("off"); 
    console.log(initial); 
    console.log(initial.length); 
    return false; 

} 

, wenn dieser ausgeführt wird und Ausgabe wie folgt dargestellt:

[on, on, on, off, off, off, on, on, on, off, off, off, on]

Aber ich brauche diese auf der und aus der in Striche (_) und Punkte (.) drehen und .push sie in anderen Array namens senseMake, wenn das möglich ist.

Die Regeln sind:

  • On für 1-2 Zeiteinheiten = Dot
  • On für ≥ 3 Zeiteinheiten = Dash

versucht, für eine Schleife zu schaffen, aber nicht funktioniert , bitte hilf mir.

das Ergebnis des Arrays So sollte oben sein: [_, ,_, ,.]

Die Schleife, die ich war regex

verwendet

for (i=0; i<initial.length; i += 2) senseMake.push("."); console.log(senseMake);

for (i=0; i<initial.length; i += 3) senseMake.push("_"); console.log(senseMake);

+1

Bitte fügen Sie die Schleife, die Sie versucht haben, zu Ihrer Frage hinzu. – Andy

+0

Bitte fügen Sie hinzu, was Ihr gewünschtes Ergebnis für dieses bestimmte Array von "An"/"Aus" wäre. – henrikmerlander

Antwort

1

Hier ist eine effiziente Lösung (keine Wiederholung) unter Verwendung von . Das Ganze könnte um 2 Zeilen sein, das heißt:

var initial = ['on', 'on', 'on', 'off', 'off', 'off', 'on', 'on', 'on', 'off', 'on', 'off']; 
var senseMake = initial.join('').replace(/(on){3,}/gi, '_').replace(/(on){1,2}/gi, '.').replace(/off/gi, '').split(''); 

Aber ich habe es in mehrere Zeilen im Snippet gebrochen, um es einfacher zu verstehen.

var initial = ['on', 'on', 'on', 'off', 'off', 'off', 'on', 'on', 'on', 'off', 'on', 'off']; 
 
var senseMake = initial.join(''); // join the elements of the array into a string 
 
senseMake = senseMake.replace(/(on){3,}/gi, '_'); // replace every instance of 3+ 'ons' with a _ 
 
senseMake = senseMake.replace(/(on){1,2}/gi, '.'); // replace every instance of 1-2 'ons' with a . 
 
senseMake = senseMake.replace(/off/gi, ''); // replace every instance of 'off' with an empty string 
 
senseMake = senseMake.split(''); // split every character into the elements of an array 
 
document.write(JSON.stringify(senseMake, null, ' ')); // display result in window
* { font-family: monospace; }

hoffe, das hilft!

+0

Wenn die Ons und Offs dem Array kontinuierlich hinzugefügt werden, wäre es das Gleiche, erstellen Sie einfach eine neue Variable wie 'var array = initial' – midnighthaps

+0

Ich bin mir nicht sicher, was Sie meinen, könnten Sie die Frage umformulieren. ..by übrigens habe ich meine Antwort bearbeitet, um das erwartete Ergebnis widerzuspiegeln. Es erzeugt jetzt ein Array, das aussieht wie "[" _ "," _ ",". " ] ' –

+0

Da im Array nicht statisch ist, wird ein" Ein "und" Aus "hinzugefügt, abhängig davon, ob die Farbe rot oder blau ist. Also das: 'var initial = ['ein', 'ein', 'ein', 'aus', 'aus', 'aus', 'ein', 'ein', 'ein', 'aus', ' on ',' off ']; ' kann nur verwendet werden, wenn es sich um ein gesetztes Array handelt, was bedeutet, dass Sie genau wissen, in welcher Reihenfolge sie sich befinden. Gibt es eine Möglichkeit zu sagen, dass initial nicht einem gesetzten Array entspricht? – midnighthaps

Verwandte Themen