Tach!
Ich hab's nun so gelöst:
var my_array = [].concat(my_array);
Du nutzt hier eine Nebenwirkung von concat() aus. Der Ausdruck macht was er soll, ist aber nicht sehr einleuchtend. Man muss dazu wissen, dass die die Funktion, die eigentlich Arrays miteinander verbinden soll, in diesem Falle zweigeteilt arbeitet. Arrays werden ausgepackt und deren Elemente an das erste Array angehängt, Nicht-Arrays werden einfach so angehängt.
Ich bin in so einem Fall unentschlossen, wie ich das werte. Einerseits sollte man seine Werkzeuge kennen und im Zweifelsfall nachschlagen, wie sie genau funktionieren. Andererseits sind solche Nicht-Offensichtlichkeiten gern Quellen für Probleme.
Das Problem lässt sich möglicherweie auch auf ganz andere Weise lösen. Angenommen, dein my_array ist eine Variable in einer Funktionssignatur, dann käme das Problem gar nicht erst auf, wenn du da nur Arrays erwarten würdest. Jeder, der da Einzelwerte übergeben möchte, muss stattdessen das Problem auf seiner Seite lösen. Aber das ist in dem Fall sogar noch mit insgesamt deutlich weniger Code zu haben.
function my_function(my_array) {
myArray.forEach(...);
}
Der Aufrufer übergibt nun Arrays einfach so, Nicht-Arrays hingegen werden mit einem simplen [] darum in Ein-Element-Arrays konvertiert.
my_function(an_array);
my_function([a_string]);
dedlfix.