it-swarm.com.de

Einfache Möglichkeit, das JavaScript-Array in eine durch Kommas getrennte Liste umzuwandeln?

Ich habe ein eindimensionales Array von Zeichenfolgen in JavaScript, das ich in eine durch Kommas getrennte Liste umwandeln möchte. Gibt es eine einfache Möglichkeit in JavaScript (oder in jQuery), um diese in eine durch Kommas getrennte Liste umzuwandeln? (Ich weiß, wie man das Array durchläuft und den String durch Verkettung selbst erstellt, wenn dies der einzige Weg ist.)

353
Herb Caudill

Die Array.prototype.join () Methode:

var arr = ["Zero", "One", "Two"];

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

684
Wayne

Tatsächlich führt die toString()-Implementierung standardmäßig einen Join mit Kommas durch:

var arr = [ 42, 55 ];
var str1 = arr.toString(); // Gives you "42,55"
var str2 = String(arr); // Ditto

Ich weiß nicht, ob dies von der JS-Spezifikation vorgeschrieben ist, aber das ist was die meisten So ziemlich alle Browser scheinen das zu tun.

83
Ates Goral

Oder (effizienter):

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

 document.write (arr); // dasselbe wie document.write (arr.toString ()) in diesem Kontext 

Die toString-Methode eines Arrays gibt beim Aufruf genau das zurück, was Sie brauchen - durch Kommas getrennte Liste.

29
Sergey Ilinsky

Hier ist eine Implementierung, die ein zweidimensionales Array oder ein Array von Spalten in eine ordnungsgemäß maskierte CSV-Zeichenfolge konvertiert. Die Funktionen prüfen nicht auf gültige Zeichenfolgen/Zahleneingaben oder Spaltenzahlen (stellen Sie sicher, dass Ihr Array von Anfang an gültig ist). Die Zellen können Kommas und Anführungszeichen enthalten! 

Hier ist ein Skript zum Dekodieren von CSV-Strings .

Hier ist mein Skript zum Codieren von CSV-Strings :

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

Ich denke, das sollte es tun:

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

Geige

Grundsätzlich wird nur geprüft, ob die Zeichenfolge ein Komma oder ein Zitat enthält. Wenn dies der Fall ist, werden alle Anführungszeichen verdoppelt und die Enden mit Anführungszeichen versehen. Dann werden die einzelnen Teile mit einem Komma verbunden.

10
mpen

Verwenden Sie die integrierte Array.toString-Methode 

var arr = ['one', 'two', 'three'];
arr.toString();  // 'one,two,three'

MDN auf Array.toString ()

7
Avijit Gupta

Es gibt viele Methoden, um ein Array in eine durch Kommas getrennte Liste zu konvertieren

1. Verwenden Sie array # join

From MDN

Die join () -Methode fügt alle Elemente eines Arrays (oder eines arrayähnlichen Objekts) zu einer Zeichenfolge zusammen.

Der Code

var arr = ["this","is","a","comma","separated","list"];
arr = arr.join(",");

Ausschnitt

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr.join(",");
console.log(arr);

2. Verwenden Sie das Array # toString

From MDN

Die toString () -Methode gibt eine Zeichenfolge zurück, die das angegebene Array und seine Elemente darstellt.

Der Code

var arr = ["this","is","a","comma","separated","list"];
arr = arr.toString();

Ausschnitt

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr.toString();
console.log(arr);

3. Fügen Sie [] + vor Array oder + [] nach einem Array hinzu

Das [] + oder + [] konvertiert es in einen String

Beweis

([]+[] === [].toString())

gibt aus true

console.log([]+[] === [].toString());
var arr = ["this","is","a","comma","separated","list"];
arr = []+arr;

Ausschnitt

var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = []+arr;
console.log(arr);

Ebenfalls

var arr = ["this","is","a","comma","separated","list"];
arr = arr+[];
var arr = ["this", "is", "a", "comma", "separated", "list"];
arr = arr + [];
console.log(arr);
7
Sagar V

Wenn Sie "und" anstelle von "" zwischen den letzten beiden Elementen verwenden müssen, können Sie Folgendes tun:

function arrayToList(array){
  return array
    .join(", ")
    .replace(/, ((?:.(?!, ))+)$/, ' and $1');
}
3
Andrew Downes

Normalerweise brauche ich etwas, das den Wert auch überspringt, wenn dieser Wert null oder undefined ist usw.

Also hier ist die Lösung, die für mich funktioniert:

// Example 1
const arr1 = ['Apple', null, 'banana', '', undefined, 'pear'];
const commaSeparated1 = arr1.filter(item => item).join(', ');
console.log(commaSeparated1); // 'Apple, banana, pear'

// Example 2
const arr2 = [null, 'Apple'];
const commaSeparated2 = arr2.filter(item => item).join(', ');
console.log(commaSeparated2); // 'Apple'

Die meisten Lösungen hier würden ', Apple' zurückgeben, wenn mein Array wie das in meinem zweiten Beispiel aussehen würde. Deshalb ziehe ich diese Lösung vor.

3
knowbody

Möchten Sie es mit einem "und" beenden?

Für diese Situation habe ich ein npm-Modul erstellt.

Versuchen Sie arrford :


Verwendungszweck

const arrford = require('arrford');

arrford(['run', 'climb', 'jump!']);
//=> 'run, climb, and jump!'

arrford(['run', 'climb', 'jump!'], false);
//=> 'run, climb and jump!'

arrford(['run', 'climb!']);
//=> 'run and climb!'

arrford(['run!']);
//=> 'run!'


Installieren

npm install --save arrford


Weiterlesen

https://github.com/dawsonbotsford/arrford


Versuch es selber

Tonic link

1
Dawson Botsford

Nehmen Sie den ursprünglichen Code:

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

Die erste Antwort auf die Verwendung der Join-Funktion ist ideal. Eine Sache, die zu berücksichtigen wäre, wäre die Verwendung der Saite. 

Für die Verwendung in einigen Endtextanzeigen:

arr.join(",")
=> "Zero,One,Two"

Für die Verwendung in einer URL zum Durchleiten mehrerer Werte auf (etwas) RESTful-Weise:

arr.join("|")
=> "Zero|One|Two"

var url = 'http://www.yoursitehere.com/do/something/to/' + arr.join("|");
=> "http://www.yoursitehere.com/do/something/to/Zero|One|Two"

Natürlich hängt alles von der endgültigen Verwendung ab. Behalten Sie einfach die Datenquelle und die Verwendung im Auge und alles wird mit der Welt in Ordnung sein.

1
E Roberts

Papa Parse (browserbasiert) behandelt Kommas in Werten und anderen Edge-Fällen . Verwenden Sie Baby Parse für Node.

Z.B. (Knoten)

const csvParser = require('babyparse');
var arr = [1,null,"a,b"] ;
var csv = csvParser.unparse([arr]) ;
console.log(csv) ;

1 , "a, b"

1
Bob

Ab Chrome 72 ist es möglich, Intl.ListFormat zu verwenden:

const vehicles = ['Motorcycle', 'Bus', 'Car'];

const formatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });
console.log(formatter.format(vehicles));
// expected output: "Motorcycle, Bus, and Car"

const formatter2 = new Intl.ListFormat('de', { style: 'short', type: 'disjunction' });
console.log(formatter2.format(vehicles));
// expected output: "Motorcycle, Bus oder Car"

const formatter3 = new Intl.ListFormat('en', { style: 'narrow', type: 'unit' });
console.log(formatter3.format(vehicles));
// expected output: "Motorcycle Bus Car"

Bitte beachten Sie, dass sich dieser Weg in einem sehr frühen Stadium befindet. Erwarten Sie daher zum Zeitpunkt der Veröffentlichung dieser Antwort Inkompatibilität mit älteren Versionen von Chrome und anderen Browsern.

0
Eliya Cohen
var arr = ["Pro1", "Pro2", "Pro3"];
console.log(arr.join());// Pro1,Pro2,Pro3
console.log(arr.join(', '));// Pro1, Pro2, Pro3

Ich mochte die Lösung unter https://jsfiddle.net/rwone/qJUh2/ , weil sie nach Kommas Leerzeichen hinzufügt:

array = ["test","test2","test3"]
array = array.toString();
array = array.replace(/,/g, ", ");
alert(array);

Oder, wie von @StackOverflaw in den Kommentaren vorgeschlagen:

array.join(', ');
0
Jaime Montoya

Diese Lösung entfernt auch Werte wie " ":

const result = ['', null, 'foo', '  ', undefined, 'bar'].filter(el => {
  return Boolean(el) && el.trim() !== '';
}).join(', ');

console.log(result); // => foo, bar
0
Andy
var array = ["Zero", "One", "Two"];
var s = array + [];
console.log(s); // => Zero,One,Two
0
alejandro