Der Versuch, ein zweidimensionales Array in Javascript zu verbinden
-
19-09-2019 - |
Frage
Ich versuche, ein zweidimensionales Array in eine Zeichenfolge zu konvertieren, um sie in dem localstorage-Array zu speichern. Allerdings ist es etwas falsch mit diesem Code, den ich nicht identifizieren kann:
for(x in array) {
if(array[x] instanceof Array) {
array[x] = array[x].join("`");
}
}
var string = array.join("@");
localStorage[key] = string;
Hat jemand eine Idee, was ich falsch mache?
Wie für das, was falsch ist, durch mehrdimensionales Array meine ich array [0] [1] usw. Wenn der Eingang in localstorage, alle ‚string‘ reduziert wird, ist @, auf der anderen Seite des @ was impliziert, gibt es immer noch Arrays.
Lösung
Was ist das etwas, was falsch ist? sicher, uCan Sie sagen, was Ihre Eingabe ist, was Sie erwartet, und was die unerwünschte Ausgang ist?
Zumindest, wenn array
ist in der Tat ein Array ist, sollten Sie keine for..in loop
verwenden. Das ist für Objekte. Verwenden Sie einfach ein
for (var i=0, l=array.length; i<l; i++){
if (array[i] instanceof Array){
array[i] = array[i].join("`");
}
}
Andere Tipps
Heute ist dies so einfach wie:
[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4
JSON
ist Standard in modernen Browser. Sie können es verwenden, um "stringify" (Umwandlung in einen JSON-String) und "analysieren" convert aus einer JSON-String.
Sie können die JSON.stringify
Funktion benutzen, um Ihre 2D-Array zu JSON konvertieren und es in localStorage
bleiben. Dann können Sie JSON.parse
verwenden, um es in ein Array zu umwandeln zurück.
var my2DArray = [[1, 2, 3], [4, 5, 6]];
var stringified = JSON.stringify(my2DArray);
localStorage[key] = stringified;
var backToOriginal = JSON.parse(localStorage[key]);
Javascript muss nicht zweidimensionalen Arrays. Es hat nur zerlumpten Arrays. Der Code funktioniert bei mir für einen entsprechenden Eingang:
array = [[1,2],[3,4]];
for(x in array) {
if(array[x] instanceof Array) {
array[x] = array[x].join("`");
}
}
var string = array.join("@");
alert(string);
Ausgabe:
1`2@3`4
Könnten Sie uns zeigen, was Eingang Sie verwenden und welche Ausgabe Sie erhalten?
Der Code scheint gut für mich zu arbeiten, in Firefox testen.
Ist es in einem bestimmten Browser versagt?
var array = [
["a","b"],
["c","d","e"]];
for(x in array) {
if(array[x] instanceof Array) {
array[x] = array[x].join("`");
}
}
var string = array.join("@");
console.log(string);