Linuchs: Javascript: Pointer auf ein Array?

Moin,

habe gesucht nach „javascript pointer auf eine variable“ und bin aus den Findlingen nicht schlau geworden.

Da ich currenTime aus einem Video ODER einem Audio (Master) auslese und damit den Karaoke-Text steuere, bilde ich zwei Arrays:

arr_ausgewaehlte_audios = document.querySelectorAll( "audio:not(.nogroup)" );
arr_ausgewaehlte_videos = document.querySelectorAll( "video:not(.nogroup)" );

Ein Video (z.B. der Dirigent) kann gemeinsam mit mehreren Audio-Spuren vorhandn sein und die Funktionen sollen currentTime vom Video abfragen, wenn vorhanden, sonst vom Audi. Dies hier

  // wer ist Master?
  if ( arr_ausgewaehlte_audios.length == 0 && arr_ausgewaehlte_videos.length > 0 ) {
    arr_master  = arr_ausgewaehlte_videos;
  } else {
    arr_master  = arr_ausgewaehlte_audios;
  }

funktioniert natürlich nicht, weil arr_master kein DOM-Objekt ist. Ich suche sowas:

arr_master -> arr_ausgewaehlte_videos; // Pointer, keine Kopie
  1. @@Linuchs

    Ein Video (z.B. der Dirigent) kann gemeinsam mit mehreren Audio-Spuren vorhandn sein und die Funktionen sollen currentTime vom Video abfragen, wenn vorhanden, sonst vom Audi. Dies hier

      // wer ist Master?
      if ( arr_ausgewaehlte_audios.length == 0 && arr_ausgewaehlte_videos.length > 0 ) {
        arr_master  = arr_ausgewaehlte_videos;
      } else {
        arr_master  = arr_ausgewaehlte_audios;
      }
    

    widerspricht deinen Anforderungen: Wenn Audios vorhanden sind, sind diese der Master, unabhängig von vorhandenen Videos.

    funktioniert natürlich nicht, weil arr_master kein DOM-Objekt ist.

    Häh?? Warum sollte?

    🖖 Живіть довго і процвітайте

    --
    „Im Vergleich mit Elon Musk bei Twitter ist ein Elefant im Porzellanladen eine Ballerina.“
    — @Grantscheam auf Twitter
    1. @Gunnar

      widerspricht deinen Anforderungen

      Ich bin ja am Rumprobieren und habe hier eine Seite mit Video, ohne Audio.

      Me gusta la vida

      (Falls hier spanisch-Kenner mitlesen, würde ich mich über den spanischen Text freuen, bin nicht so fit, Gehörtes in die Tasten zu klopfen. Da kann nur sowas rauskommen wie „der weiße Neger Wumbaba“. sierro = Berge? Da geht's schon los)

      Wenn beides da ist, muss ich noch entscheiden, wie ich das mache.

      Jedenfalls bringt

      arr_master[0].currentTime
      

      keine Ergebnisse, wirft aber auch keinen Fehler.

      1. Hallo,

        Me gusta la vida

        (Falls hier spanisch-Kenner mitlesen, würde ich mich über den spanischen Text freuen

        da muss ich leider passen. Ich verstehe geschriebenes Spanisch ansatzweise, aber nicht gut genug, um es anderen um die Ohren zu hauen. Und bei gesprochenem oder gesungenem Spanisch ist es noch schwieriger.

        Da kann nur sowas rauskommen wie „der weiße Neger Wumbaba“.

        ... der aus den Wiesen steigt, ja. Misheard lyrics, immer wieder amüsant. Und Wumbaba ist tatsächlich ein ziemlich prominentes Beispiel. Ebenso bekannt ist "Agathe Bauer", "Barnabas is crying" oder "Du bist das Flachdach für meine Seele".

        Wenn beides da ist, muss ich noch entscheiden, wie ich das mache.

        Habe ich nicht gerade eben gelesen, dass dann die Videospur die führende Größe sein soll?

        Einen schönen Tag noch
         Martin

        --
        Wie man sich bettet, so schallt es heraus.
        1. Hi,

          Da kann nur sowas rauskommen wie „der weiße Neger Wumbaba“.

          ... der aus den Wiesen steigt, ja. Misheard lyrics, immer wieder amüsant. Und Wumbaba ist tatsächlich ein ziemlich prominentes Beispiel. Ebenso bekannt ist "Agathe Bauer", "Barnabas is crying" oder "Du bist das Flachdach für meine Seele".

          Schön ist auch das bayerische Stück "G'wand hamma mehra" (zu Deutsch: "wir haben mehrere Kleidungsstücke")

          cu,
          Andreas a/k/a MudGuard

  2. Der currentTime wurde gar nicht abgefragt, weil die id=karaoke unbekannt war.

    Jetzt funktioniert es mit

    <body id=karaoke>
    
    let currentTime = arr_master[0].currentTime.toFixed(2);
    

    Ich hätte schwören können, dass arr_master eine Kopie ist, aber es ist wohl doch ein Pointer ...

    1. Hallo Linuchs,

      JavaScript ist nicht PHP. Ein Array ist ein Objekt, und wenn Du in einer Variablen ein Array gespeichert zu haben glaubst, dann hast Du das gar nicht.

      Das Array lümmelt sich statt dessen auf dem Heap herum, und in der Variablen steht ein Pointer darauf. Weist Du die Variable einer anderen Variablen zu, kopierst Du nur den Pointer und hast zwei Variablen mit einem Pointer auf's gleiche Array.

      Und erst, wenn all diese Variablen aus ihrem Scope gepurzelt sind oder einen anderen Wert zugewiesen bekommen haben, kommt Garb H. Callegda[1] und holt den Arraymüll von der Halde herunter.

      In PHP sind Arrays ebenfalls Objekte und lungern auf dem Heap herum, aber irgendwie kriegt PHP das mit, wenn mehrere Variablen auf ein Array verweisen, ohne dass eine Referenz erstellt wurde. Und sobald man dann etwas am Array verändert, bekommt die Variable, über die die Änderung durchgeführt wurde, eine Kopie des Arrays, so dass es in PHP so aussieht, als würden Arrays nicht per Referenz, sondern per Wert übergeben.

      Rolf

      --
      sumpsi - posui - obstruxi

      1. Sprich es laut und hör gut zu 😉 ↩︎