544 votes

Moyen facile pour activer Javascript de tableau dans la liste séparée par des virgules?

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.)

980voto

Wayne Points 12304

La jointure de la fonction:

var arr = new Array(3);
arr[0] = "Zero";
arr[1] = "One";
arr[2] = "Two";

document.write(arr.join(","));

117voto

Ates Goral Points 47670

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.

30voto

Sergey Ilinsky Points 16803

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.

14voto

skibulk Points 684

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");
    };
}

11voto

Mark Points 49079

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(',');

violon

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X