Konvertieren Sie das Javascript-Array in einen String


115

Ich versuche, eine "Wert" -Liste zu durchlaufen und sie in eine Zeichenfolge umzuwandeln. Hier ist der Code:

var blkstr = $.each(value, function(idx2,val2) {                    
     var str = idx2 + ":" + val2;
     alert(str);
     return str;
}).get().join(", ");    

Die Funktion alert () funktioniert einwandfrei und zeigt den richtigen Wert an. Aber irgendwie bekommt die .get () -Funktion von jquery nicht die richtige Art von Objekt und schlägt fehl. Was mache ich falsch?


5
Was ist "Wert"? Ist es ein Array? In diesem Fall funktioniert var str = value.join (',') möglicherweise einwandfrei.
StefanS

Ja. Wenn ich den Teil .get () auskommentiere, erhalte ich Warnfelder mit "id1: val1", "id2: val2" usw.
Neo

Meinst du "... die richtige Art von Objekt bekommen"? (Ein schnelles Korrekturlesen vor dem Klicken auf Frage stellen ist normalerweise eine gute Idee.) (Ich habe meinen früheren Kommentar entfernt, der etwas stärker formuliert wurde - diese Frage hat viel weniger Tippfehler und so viel als viele.)
TJ Crowder

Antworten:


130

Wenn valuees sich um ein assoziatives Array handelt, funktioniert dieser Code einwandfrei:

var value = { "aaa": "111", "bbb": "222", "ccc": "333" };
var blkstr = [];
$.each(value, function(idx2,val2) {                    
  var str = idx2 + ":" + val2;
  blkstr.push(str);
});
console.log(blkstr.join(", "));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

(Ausgabe wird in der Entwicklungskonsole angezeigt)

Wie Felix erwähnte, each()iteriert er nur das Array, nichts weiter.


118

Das Konvertieren von Array zu String ist so einfach!

var A = ['Sunday','Monday','Tuesday','Wednesday','Thursday']
array = A + ""

Das war's Jetzt ist A eine Saite. :) :)


7
Ich würde stattdessen A.toString () vorschlagen, damit klarer wird, was Sie tun.
Justin

8
Wenn Sie dies tun [1,2,[3]].toString(), werden Sie bekommen 1,2,3, was ziemlich Müll ist. Diese Antwort ist nur eine schlechtere Möglichkeit, denselben Aufruf an dieselbe fehlerhafte native Zeichenfolgenmethode zu schreiben. 42 positive Stimmen?
Carl Smith

8
Sie können auch einem Array wie diesem beitreten['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
Etoxin

1
Array.join()ist definitiv die beste Option, da Werte nicht einfach mit Kommas verkettet werden, sondern der Benutzer bestimmen kann, wie die Verkettung erfolgen soll. Sie können beispielsweise Komma + Leerzeichen verwenden.
Felipe Leão

1
Das ist perfekt für mich. Ich übergebe ein Array, das in eine durch Kommas getrennte Zeichenfolge geändert wird, keine Leerzeichen für einen API-Aufruf. Danke noch einmal.
Nick D

104

Sie können .toString()ein Array mit einem Komma verbinden.

var array = ['a', 'b', 'c'];
array.toString(); // result: a,b,c

Oder setzen Sie das Trennzeichen mit array.join('; '); // result: a; b; c.


3
Ich hatte nur gehofft, dass das Array buchstäblich in einen String übersetzt wird und ich dann gezwungen bin, Regex zu verwenden, um das Fett abzubauen, aber das ist Oh, so viel besser! Danke Justin.
Cranberry

52

Ich bin mir nicht sicher, ob du das wolltest, aber

var arr = [A, B, C];
var arrString = arr.join(", ");

Dies führt zu folgender Ausgabe:

A, B, C.


1
Dies ist der einfachste Weg aller Zeiten, ein
großes Lob

1
Ich brauchte ein zusätzliches Leerzeichen für Komma, dies war der einzig einfache Weg.
Talha Talip Açıkgöz

1
Einfachster und einfacher Weg. Vielen Dank
Raul A.

36

Vier Methoden zum Konvertieren eines Arrays in eine Zeichenfolge.

Zu einer Schnur zwingen

var arr = ['a', 'b', 'c'] + [];  // "a,b,c"

var arr = ['a', 'b', 'c'] + '';  // "a,b,c"

Berufung .toString()

var arr = ['a', 'b', 'c'].toString();  // "a,b,c"

Explizites Beitreten mit .join()

var arr = ['a', 'b', 'c'].join();  // "a,b,c" (Defaults to ',' seperator)

var arr = ['a', 'b', 'c'].join(',');  // "a,b,c"

Sie können andere Trennzeichen verwenden, z. ', '

var arr = ['a', 'b', 'c'].join(', ');  // "a, b, c"

Verwenden von JSON.stringify()

Dies ist sauberer, da es Zeichenfolgen innerhalb des Arrays zitiert und verschachtelte Arrays ordnungsgemäß behandelt.

var arr = JSON.stringify(['a', 'b', 'c']);  // '["a","b","c"]'

17

jQuery.eachSchleift nur über das Array, es macht nichts mit dem Rückgabewert . Sie suchen jQuery.map(ich denke auch, dass dies get()unnötig ist, da Sie sich nicht mit jQuery-Objekten befassen):

var blkstr = $.map(value, function(val,index) {                    
     var str = index + ":" + val;
     return str;
}).join(", ");  

DEMO


Aber warum sollte man in diesem Fall überhaupt jQuery verwenden? mapführt nur einen unnötigen Funktionsaufruf pro Element ein.

var values = [];

for(var i = 0, l = value.length; i < l; i++) {
    values.push(i + ':' + value[i]);
}

// or if you actually have an object:

for(var id in value) {
    if(value.hasOwnProperty(id)) {
        values.push(id + ':' + value[id]);
    }
}

var blkstr = values.join(', ');

∆: Es wird nur der Rückgabewert verwendet, ob die Elemente weiterhin durchlaufen werden sollen oder nicht. Die Rückgabe eines "Falsy" -Werts stoppt die Schleife.


Ich habe hier irgendwie "bereinigten" Code eingefügt. Ich beschäftige mich tatsächlich mit Abfrageobjekten. Danke, Karte funktioniert perfekt.
Neo

@Neo: Sie brauchen nur, mapwenn valuees sich um ein jQuery-Objekt handelt. Und dann solltest du verwenden value.map(...).get(). Wenn Sie jedoch nur ein Array von jQuery-Objekten haben, benötigen Sie keine get.
Felix Kling

9

Verwenden Sie join()und das Trennzeichen.

Arbeitsbeispiel

var arr = ['a', 'b', 'c', 1, 2, '3'];

// using toString method
var rslt = arr.toString(); 
console.log(rslt);

// using join method. With a separator '-'
rslt = arr.join('-');
console.log(rslt);

// using join method. without a separator 
rslt = arr.join('');
console.log(rslt);


4

Dies ist meine Funktion, konvertiere Objekt oder Array in JSON

function obj2json(_data){
    str = '{ ';
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += "'" + i + "':" + obj2arr(v) ;
        else if ($.type(v)== 'array')
            str += "'" + i + "':" + obj2arr(v) ;
        else{
            str +=  "'" + i + "':'" + v + "'";
        }
    });
    return str+= '}';
}

Ich bearbeite nur auf v0.2 ^. ^

 function obj2json(_data){
    str = (($.type(_data)== 'array')?'[ ': '{ ');
    first = true;
    $.each(_data, function(i, v) { 
        if(first != true)
            str += ",";
        else first = false;
        if ($.type(v)== 'object' )
            str += '"' + i + '":' + obj2json(v) ;
        else if ($.type(v)== 'array')
            str += '"' + i + '":' + obj2json(v) ;
        else{
            if($.type(_data)== 'array')
                str += '"' + v + '"';
            else
                str +=  '"' + i + '":"' + v + '"';
        }
    });
    return str+= (($.type(_data)== 'array')? ' ] ':' } ');;
}

3

Ich brauchte ein Array, um eine String-Darstellung eines Arrays zu werden. Ich meine, ich brauchte das

var a = ['a','b','c'];
//became a "real" array string-like to pass on query params so was easy to do:
JSON.stringify(a); //-->"['a','b','c']"

vielleicht braucht es jemand :)


2
var arr = new Array();

var blkstr = $.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);
    return arr;
}).join(', ');

console.log(blkstr);

ODER

var arr = new Array();

$.each([1, 2, 3], function(idx2,val2) {                    
    arr.push(idx2 + ":" + val2);

});

console.log(arr.join(', '));

2

Das Konvertieren eines Arrays in eine GET-Parameterzeichenfolge, die an eine URL angehängt werden kann, kann wie folgt erfolgen

function encodeGet(array){
    return getParams = $.map(array , function(val,index) {                    
        var str = index + "=" + escape(val);
        return str;
   }).join("&");
}

Nennen Sie diese Funktion als

var getStr = encodeGet({
    search:     $('input[name="search"]').val(),
    location:   $('input[name="location"]').val(),
    dod:        $('input[name="dod"]').val(),
    type:       $('input[name="type"]').val()
});
window.location = '/site/search?'+getStr;

Was leitet den Benutzer an die / site / search weiter? Seite mit den get-Parametern, die in dem für encodeGet angegebenen Array aufgeführt sind.


1
Beachten Sie, dass jQuery.param (Array) das tut, was encodeGet (Array) tut.
Curtis Yallop

1

Sollte Arrays nicht mit Listen verwechseln ... Dies ist eine Liste: {...} und hat keine Länge oder andere Array-Eigenschaften.

Dies ist ein Array: [...] und Sie können Array-Funktionen, Methoden usw. verwenden, wie hier vorgeschlagen: someArray.toString ();

"someObj.toString ();" funktioniert einfach nicht bei anderen Objekttypen wie Listen. ;-);



0

Hier ist ein Beispiel mit Unterstrichfunktionen.

var exampleArray = [{name: 'moe', age: 40}, {name: 'larry', age: 50}, {name: 'curly', age: 60}];
var finalArray = _.compact(_.pluck(exampleArray,"name")).join(",");

Die endgültige Ausgabe wäre "moe, larry, curly".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.