JS Arrya-Elemente nach String durchsuchen und ersetzen

Patrick24

Cadet 2nd Year
Registriert
Dez. 2019
Beiträge
16
Hey,

ich programmiere gerade ein Spiel mit js und habe folgendes Problem:
Ich habe 7 Arrays in jedem Array sind Elemente entweder so test_test gespeichert oder test.
jetzt möchte ich überprüfen ob das hinterste Element ein test_ am anfang hat und wenn ja das test_ entfernen.
Habe schon vieles probiert aber ohne erfolg.
Wie könnte ich das machen?

lg
patrick
 
Hi,

iteriere per Schleife über das Array und prüfe die einzelnen Elemente?

VG,
Mad
 
  • Gefällt mir
Reaktionen: abcddcba
du willst nur das hintersete Element prüfen? Dann greif doch einfach darauf zu array[array.length() - 1] oder so.
 
Javascript:
var regex = '/^test\_*?/g';
var arr = new Array();

arr.push('test');
arr.push('test_test');

if(arr[arr.length - 1].search(regex)) {
alert('match');
}

Du willst wirklich nur das letzte Element prüfen?
 
ja
Madman1209 schrieb:
Hi,

iteriere per Schleife über das Array und prüfe die einzelnen Elemente?

VG,
Mad
nur das letzte element
und das was ich machen will ist komplizierter

Toms schrieb:
du willst nur das hintersete Element prüfen? Dann greif doch einfach darauf zu array[array.length() - 1] oder so.
ah ne nur bringt nichts

blablub1212 schrieb:
Javascript:
var regex = '/^test\_*?/g';
var arr = new Array();

arr.push('test');
arr.push('test_test');

if(arr[arr.length - 1].search(regex)) {
alert('match');
}

Du willst wirklich nur das letzte Element prüfen?

ja nur das letzte
 
Zuletzt bearbeitet:
ok da das beispiel verwirrend ist hier der verwendungszweck:
ich programmiere Solitäre mit js.
die karten werden mit folgender function gemischt:
Javascript:
function mix_cards()
{
herz_ablagestapel = [];
pick_ablagestapel = [];
kreuz_ablagestapel = [];
karo_ablagestapel = [];
talon = [];
stapel_1 = [];
stapel_2 = [];
stapel_3 = [];
stapel_4 = [];
stapel_5 = [];
stapel_6 = [];
stapel_7 = [];
schonAusgeteilt = [];


for (i = 0; i < 24; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   talon[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 1; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_1[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 2; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_2[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 3; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_3[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 4; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_4[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 5; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_5[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 6; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_6[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}


for (i = 0; i < 7; i++)
{
  var min = 1;
  var max = 52;
  mix_card_id = Math.floor(Math.random() * (max - min + 1)) + min;
  init_card_id();
  if (schonAusgeteilt.indexOf(mix_card_id) == -1)
  {
   stapel_7[i] = mix_card_id;
   schonAusgeteilt[schonAusgeteilt.length] = mix_card_id;
  } else {
   i--;
  }
}
}

Diese funktion weißt den verschieden Zahlen die Karte zu:

Javascript:
function init_card_id()
{
  if (mix_card_id == 1)
  {
   mix_card_id = "back_pick_ass";
  }
  if (mix_card_id == 2)
  {
   mix_card_id = "back_pick_zwei";
  }
  if (mix_card_id == 3)
  {
   mix_card_id = "back_pick_drei";
  }
  if (mix_card_id == 4)
  {
   mix_card_id = "back_pick_vier";
  }
  if (mix_card_id == 5)
  {
   mix_card_id = "back_pick_fuenf";
  }
  if (mix_card_id == 6)
  {
   mix_card_id = "back_pick_sechs";
  }
  if (mix_card_id == 7)
  {
   mix_card_id = "back_pick_sieben";
  }
  if (mix_card_id == 8)
  {
   mix_card_id = "back_pick_acht";
  }
  if (mix_card_id == 9)
  {
   mix_card_id = "back_pick_neun";
  }
  if (mix_card_id == 10)
  {
   mix_card_id = "back_pick_zehn";
  }
  if (mix_card_id == 11)
  {
   mix_card_id = "back_pick_bube";
  }
  if (mix_card_id == 12)
  {
   mix_card_id = "back_pick_dame";
  }
  if (mix_card_id == 13)
  {
   mix_card_id = "back_pick_koenig";
  }


  if (mix_card_id == 14)
  {
   mix_card_id = "back_kreuz_ass";
  }
  if (mix_card_id == 15)
  {
   mix_card_id = "back_kreuz_zwei";
  }
  if (mix_card_id == 16)
  {
   mix_card_id = "back_kreuz_drei";
  }
  if (mix_card_id == 17)
  {
   mix_card_id = "back_kreuz_vier";
  }
  if (mix_card_id == 18)
  {
   mix_card_id = "back_kreuz_fuenf";
  }
  if (mix_card_id == 19)
  {
   mix_card_id = "back_kreuz_sechs";
  }
  if (mix_card_id == 20)
  {
   mix_card_id = "back_kreuz_sieben";
  }
  if (mix_card_id == 21)
  {
   mix_card_id = "back_kreuz_acht";
  }
  if (mix_card_id == 22)
  {
   mix_card_id = "back_kreuz_neun";
  }
  if (mix_card_id == 23)
  {
   mix_card_id = "back_kreuz_zehn";
  }
  if (mix_card_id == 24)
  {
   mix_card_id = "back_kreuz_bube";
  }
  if (mix_card_id == 25)
  {
   mix_card_id = "back_kreuz_dame";
  }
  if (mix_card_id == 26)
  {
   mix_card_id = "back_kreuz_koenig";
  }


  if (mix_card_id == 27)
  {
   mix_card_id = "back_karo_ass";
  }
  if (mix_card_id == 28)
  {
   mix_card_id = "back_karo_zwei";
  }
  if (mix_card_id == 29)
  {
   mix_card_id = "back_karo_drei";
  }
  if (mix_card_id == 30)
  {
   mix_card_id = "back_karo_vier";
  }
  if (mix_card_id == 31)
  {
   mix_card_id = "back_karo_fuenf";
  }
  if (mix_card_id == 32)
  {
   mix_card_id = "back_karo_sechs";
  }
  if (mix_card_id == 33)
  {
   mix_card_id = "back_karo_sieben";
  }
  if (mix_card_id == 34)
  {
   mix_card_id = "back_karo_acht";
  }
  if (mix_card_id == 35)
  {
   mix_card_id = "back_karo_neun";
  }
  if (mix_card_id == 36)
  {
   mix_card_id = "back_karo_zehn";
  }
  if (mix_card_id == 37)
  {
   mix_card_id = "back_karo_bube";
  }
  if (mix_card_id == 38)
  {
   mix_card_id = "back_karo_dame";
  }
  if (mix_card_id == 39)
  {
   mix_card_id = "back_karo_koenig";
  }


  if (mix_card_id == 40)
  {
   mix_card_id = "back_herz_ass";
  }
  if (mix_card_id == 41)
  {
   mix_card_id = "back_herz_zwei";
  }
  if (mix_card_id == 42)
  {
   mix_card_id = "back_herz_drei";
  }
  if (mix_card_id == 43)
  {
   mix_card_id = "back_herz_vier";
  }
  if (mix_card_id == 44)
  {
   mix_card_id = "back_herz_fuenf";
  }
  if (mix_card_id == 45)
  {
   mix_card_id = "back_herz_sechs";
  }
  if (mix_card_id == 46)
  {
   mix_card_id = "back_herz_sieben";
  }
  if (mix_card_id == 47)
  {
   mix_card_id = "back_herz_acht";
  }
  if (mix_card_id == 48)
  {
   mix_card_id = "back_herz_neun";
  }
  if (mix_card_id == 49)
  {
   mix_card_id = "back_herz_zehn";
  }
  if (mix_card_id == 50)
  {
   mix_card_id = "back_herz_bube";
  }
  if (mix_card_id == 51)
  {
   mix_card_id = "back_herz_dame";
  }
  if (mix_card_id == 52)
  {
   mix_card_id = "back_herz_koenig";
  }
}

da es bei solitär ja auch nicht umgedrehte karten gibt generiere ich sie mit back_...
jetzt möchte ich eine function erstellen die falls das hinterste element mit back_ anfängt das back_ entfernen damit meine drawCards() function erkennt das sie nun sichtbar ist.

hoffe es ist jetzt besser verständlich

lg
patrick
 
Kennst du schon Klassen? Grob so:
Code:
class Karte {
  wert;
  symbol;
  sichtbar;
  toString() {
    var back = this.sichtbar ? '' : 'back_';
    return back + '_' + this.symbol + '_' + this.wert;
  }
}
Weil dein aktueller Code ist sehr umständlich und groß.
 
Wenn ich etwas Feedback geben darf:

Deine Schleifen bestehen zum Großteil aus immer dem gleichen Code. Es wäre daher sinnvoll, wenn Du das ganze eine Funktion auslagerst und damit nicht den Code zigfach wiederholen musst.

Die Funktion "init_card_id" ist in dieser Form ein ziemliches Monster. Du könntest das ganze sehr einfach über ein Objekt als Key Value Store lösen:

Javascript:
const cardIds = {
    1: 'back_pick_ass',
  2: 'back_pick_zwei'
  ...
}

const cardId = 2
const mixCardId = cardIds[cardId] // => back_pick_zwei

Desweiteren mischst Du die Art Deine Variablen zu benennen munter zwischen Deutsch und Englisch bzw. Snake und Camel Case. Das ist macht den Code schlecht lesbar.

Außerdem kann ich nur davon abraten, noch "var" als Keyword für Variablendeklarationen zu verwenden. Du kannst Dir damit recht einfach ungewollte Seiteneffekte einhandeln, vor allem weil Du z.B. in "init_card_id" auch anfängst außerhalb der Funktion deklarierte Variablen zu überschreiben. Es ist besser, wenn Du einen Wert hineingibst, diesen nur in einer Funktion verändern und als Rückgabewert zu verwenden. So kannst ungewollte Veränderungen der Variablen vermeiden.

Zu Deinem Problem: es wäre wahrscheinlich besser, wenn Du einfach pro Karte ein Objekt verwendest, in dem dann z.B. einfach Properties verwendest, um den Namen, den Zustand usw. zu speichern. Das lässt sich auch deutlich einfacher handhaben.

Edit: so wie Teiby es eben mit der Klasse vorgeschlagen hat. :)
 
  • Gefällt mir
Reaktionen: abcddcba
Teiby schrieb:
Kennst du schon Klassen? Grob so:
Code:
class Karte {
  wert;
  symbol;
  sichtbar;
  toString() {
    var back = this.sichtbar ? '' : 'back_';
    return back + '_' + this.symbol + '_' + this.wert;
  }
}
Weil dein aktueller Code ist sehr umständlich und groß.
Ich weiß das er umständlich ist (und auch groß)
besser kriege ich es aber leider nicht hin
was klassen sind weiß ich aber umgehen kann ich damit nicht
Ergänzung ()

könnte ich dir den kompletten code mal per pn schicken und du sagst mir dann wie ich ihn verändern muss das es klappt?
 
Zuletzt bearbeitet:
Riecht irgendwie nach Hausaufgabe, wenn du um jeden Preis die fertige Lösung willst, aber dir der Weg dahin (das lernen) egal ist.
 
  • Gefällt mir
Reaktionen: mental.dIseASe
Ich will keine fertige lösung
es geht mir darum wie es funktionieren würde, weil ich es auch nach stunden probieren nicht hinkriege

PS:
es sind keine hausaufgaben
 
du solltest evtl. erstmal den Code so umschreiben, dass er kompakter ist. Alleine die for schleifen kannst du doch wohl in eine Methode packen, welche den Wert i und das Array als Argument nimmt, das ist ja soweit ich sehe der einzige Unterschied. Und deine init_card_id, sorry - aber das musst du doch selbst sehen, so viele if Blöcke und keine else? Warum dann nicht ein switch-case wneigstens? Oder pack es in eine Map oder wie vorgeschlagen in ein K-V Objekt.

Was genau jetzt an welcher Stelle in deinem Code nicht geht, das hast du auch nicht wirklich erwähnt, oder ich sehe es nicht. Du hast gesagt etwas geht nicht, aber was genau nicht, wie stellst du das fest und was genau soll sich ändern. Niemand wird hier - vermutlich - deine Code debuggen, von einem ausführbarem Beispiel (MWE) sind wir mit dem geposteten Code wohl auch weit entfernt.

Also, schreib mal bitte den Code erstmal so um, wie es eine Programmiersprache vorsieht, Wiederverwendung + geeignete Kontrollstrukturen und Datenstrukturen.
 
switch case hat nicht funktioniert(weiß nicht warum)
wie der titel schon sagt das back_ zu entfernen
hab aber gerade neuen versuch am laufen wie es gehen könnte

das mit den for-schleifen in eine function zu packen ha ich auch schon versucht... funktioniert hats aber nicht
 
Zurück
Oben