J'ai un tableau à une dimension de chaînes de caractères en Javascript et j'aimerais la transformer en une liste séparée par des virgules. Est-il une façon simple de jardin-variété Javascript (jQuery) pour le transformer en une liste séparée par des virgules? (Je sais comment faire pour parcourir le tableau et construire la chaîne de moi-même par la concaténation si c'est la seule façon.)
Réponses
Trop de publicités?En fait, l' toString()
la mise en œuvre d'une jointure avec les virgules par défaut:
var arr = [ 42, 55 ];
var str1 = arr.toString(); // Gives you "42,55"
var str2 = String(arr); // Ditto
Je ne sais pas si c'est mandaté par le JS spec mais c'est ce que la plupart assez bien tous les navigateurs semblent être en train de faire.
Ou (plus efficace):
var arr = new Array(3); arr[0] = "Zéro"; arr[1] = "Un"; arr[2] = "Deux"; document.écrire(arr); // même en tant que document.écrire(arr.toString()) dans ce contexte
La méthode toString d'un tableau lorsqu'il est appelé retourne exactement ce dont vous avez besoin - liste séparée par des virgules.
Voici une application qui convertit un tableau à deux dimensions ou d'un tableau de colonnes dans un échappées CSV chaîne. Les fonctions ne vérifie pas la validité de la chaîne de/nombre de saisie ou une colonne de compte (s'assurer que votre tableau est valable pour commencer). Les cellules peuvent contenir des virgules et des citations!
EDIT: j'ai mis à jour le script et collé ci-dessous. Maintenant soutenir booléen, numérique, null, et les types d'objets. Les objets sont tout simplement jeté à la chaîne.
Voici l'ancienne version sur JSFiddle: http://jsfiddle.net/skibulk/F5hGx/
Voici la nouvelle version sur JSFiddle: http://jsfiddle.net/skibulk/F5hGx/19/
// Example
var csv = new csvWriter();
csv.del = '\t';
csv.enc = "'";
var nullVar;
var testStr = "The comma (,) pipe (|) single quote (') double quote (\") and tab (\t) are commonly used to tabulate data in plain-text formats.";
var testArr = [
false,
0,
nullVar,
// undefinedVar,
'',
{key:'value'},
];
console.log(csv.escapeCol(testStr));
console.log(csv.arrayToRow(testArr));
console.log(csv.arrayToCSV([testArr, testArr, testArr]));
/**
* Class for creating csv strings
* Handles multiple data types
* Objects are cast to Strings
**/
function csvWriter(del, enc) {
this.del = del || ','; // CSV Delimiter
this.enc = enc || '"'; // CSV Enclosure
// Convert Object to CSV column
this.escapeCol = function (col) {
if(isNaN(col)) {
// is not boolean or numeric
if (!col) {
// is null or undefined
col = '';
} else {
// is string or object
col = String(col);
if (col.length > 0) {
// use regex to test for del, enc, \r or \n
// if(new RegExp( '[' + this.del + this.enc + '\r\n]' ).test(col)) {
// escape inline enclosure
col = col.split( this.enc ).join( this.enc + this.enc );
// wrap with enclosure
col = this.enc + col + this.enc;
}
}
}
return col;
};
// Convert an Array of columns into an escaped CSV row
this.arrayToRow = function (arr) {
var arr2 = arr.slice(0);
var i, ii = arr2.length;
for(i = 0; i < ii; i++) {
arr2[i] = this.escapeCol(arr2[i]);
}
return arr2.join(this.del);
};
// Convert a two-dimensional Array into an escaped multi-row CSV
this.arrayToCSV = function (arr) {
var arr2 = arr.slice(0);
var i, ii = arr2.length;
for(i = 0; i < ii; i++) {
arr2[i] = this.arrayToRow(arr2[i]);
}
return arr2.join("\r\n");
};
}
Je pense que cela devrait le faire:
var arr = ['contains,comma', 3.14, 'contains"quote', "more'quotes"]
var item, i;
var line = [];
for (i = 0; i < arr.length; ++i) {
item = arr[i];
if (item.indexOf && (item.indexOf(',') !== -1 || item.indexOf('"') !== -1)) {
item = '"' + item.replace(/"/g, '""') + '"';
}
line.push(item);
}
document.getElementById('out').innerHTML = line.join(',');
Fondamentalement, tout ce qu'il fait est de vérifier si la chaîne contient une virgule ou un devis. Si c'est le cas, il double toutes les citations, et met des guillemets sur les extrémités. Puis il se joint à chacune des parties par une virgule.