2012-01-06 6 views
0

Par exemple, j'ai quelque chose comme ça.Façon simple d'importer et d'exporter et de stocker des tableaux

var Ar : Array; 
Ar[0] = 'apple'; 
Ar[3] = 'pineapple'; 
Ar[12] = 'car'; 
Ar[33] = 'dog'; 
Ar[41] = 'cat'; 
Ar[21] = 'apple'; 

Et j'ai besoin de le stocker dans un simple fichier texte. Comme ceci

ArText : String ; 
ArtText = "0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple" 

Vous avez obtenu le point.

Quelle est la meilleure façon de convertir Array en une chaîne lisible, puis de retour? Le code Javascript sera le meilleur, mais vous pouvez utiliser presque n'importe quel similaire.

+2

Voir http://www.w3schools.com/jsref/jsref_tostring_array.asp, http://www.w3schools.com/jsref/jsref_join.asp et http://www.w3schools.com /jsref/jsref_split.asp – Stefan

Répondre

0

Si c'est seulement chaînes du tableau, vous pouvez utiliser la méthode join() sur l'objet Array pour créer une chaîne séparée par des virgules, puis utilisez la méthode split() sur l'objet String pour convertir la chaîne de retour à un tableau.

var Ar = new Array; 
Ar[0] = 'apple'; 
Ar[3] = 'pineapple'; 
Ar[12] = 'car'; 
Ar[33] = 'dog'; 
Ar[41] = 'cat'; 
Ar[21] = 'apple'; 

var stringRepresentation = Ar.join(","); 
var backToArray = stringRepresentation.split(";"); 

Vous pouvez le voir fonctionner ici; http://jsfiddle.net/ykQRX/. Remarque J'ai également corrigé votre code JavaScript invalide (var Ar = new Array;).

+0

Votre code affichera une chaîne de ce type "apple ,,, ananas ,,,,,,,,, car ,,,,,,,,, apple ,,,,,,,,, ,, chien ,,,,,,,, chat "Son pas très lisible. J'ai besoin de quelque chose de plus compact comme "1-pomme, 3-ananas ..." – rendom

4

Mon impulsion initiale était de convertir directement à JSON, mais je compris que JSON.stringify() retourne quelque chose comme ceci:

["apple",null,null,"pineapple",null,null,null,null,null,null,null,null,"car",null,null,null,null,null,null,null,null,"apple",null,null,null,null,null,null,null,null,null,null,null,"dog",null,null,null,null,null,null,null,"cat"] 

Parce que votre tableau a un tas de créneaux horaires non définis que tout se null parce que JSON doesn ne supporte pas les valeurs indéfinies. Ce qui serait OK si vous avez juste besoin de le stocker, sauf quand vous le convertissez en un tableau que vous finiriez avec des nulls partout au lieu de non défini, donc vous auriez à tenir compte de cela (pas un gros problème), mais dans tout Dans ce cas, il semble que vous souhaitiez qu'il soit lisible par l'utilisateur.

Donc, je vous suggère plutôt de le convertir en un objet, puis de convertir l'objet en JSON en utilisant JSON.stringify(). Pour le reconvertir, utilisez JSON.parse() pour transformer votre chaîne en objet, puis faites défiler les propriétés de l'objet pour créer un tableau fragmenté.

Ce que je propose entraînerait une chaîne JSON comme ceci:

{"0":"apple","3":"pineapple","12":"car","21":"apple","33":"dog","41":"cat"} 

Le code:

function sparseArrayStringify(arr) { 
    var obj = {}, 
     i; 
    for (i=0; i < arr.length; i++) 
     if (typeof arr[i] != "undefined") 
      obj[i] = arr[i]; 
    return JSON.stringify(obj); 
} 

function parseToSparseArray(str) { 
    var arr = [], 
     obj = JSON.parse(str), 
     k; 
    for (k in obj) 
     arr[k] = obj[k]; 
    return arr; 
} 

var stringifiedArray = sparseArrayStringify(Ar); // where Ar is your array 

// and change it back 
var anArray = parseToSparseArray(stringifiedArray); 

démonstration de travail: http://jsfiddle.net/XXqVD/

Note: dans mon parseToSparseArray() fonction que je n'ai pas pris la peine de tester que les propriétés de l'objet dans la chaîne étant analysé sont non-nég entiers actifs, mais vous pouvez l'ajouter si vous le souhaitez.

Les nouveaux navigateurs prennent en charge l'objet JSON avec les méthodes associées ou, pour les navigateurs plus anciens, vous pouvez inclure la bibliothèque json2.js. Par ailleurs, le code de votre question n'est pas valide JavaScript: vous ne pouvez pas déclarer des variables avec un type dans JS. Voir les exemples dans mon code pour savoir comment déclarer des tableaux, des objets, etc.

EDIT: OK, je ne sais pas pourquoi vous voudriez la version non-JSON quand JSON est un format standard bien connu, mais voici quelques fonctions non testées qui lisent et écrivent exactement le format de la question:

"0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple" 

Notez que le format proposé ne fonctionnera pas si l'un des éléments du tableau contiennent des virgules ou des traits d'union. C'est pourquoi JSON est la voie à suivre. Quoi qu'il en soit:

function serialiseArray(arr) { 
    var workingArray = [], 
     i; 
    for (i=0; i < arr.length; i++) 
     if (typeof arr[i] != "undefined") 
      workingArray.push(i + "-" + arr[i]); 
    return workingArray.join(","); 
} 

function deserialiseArray(str) { 
    var arr = [], 
     items = str.split(","), 
     item, 
     i; 
    for (i=0; i < items.length; i++) { 
     item = items[i].split("-"); 
     arr[item[0]] = item[1]; 
    } 
    return arr; 
} 
+0

Oui c'est bon. Mais qu'en est-il sans JSON. – rendom

Questions connexes