Konwertuj tablicę javascript na ciąg

115

Próbuję wykonać iterację po liście „wartości” i przekonwertować ją na ciąg. Oto kod:

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

Funkcja alert () działa dobrze i wyświetla odpowiednią wartość. Ale w jakiś sposób funkcja .get () jquery nie pobiera właściwego rodzaju obiektu i kończy się niepowodzeniem. Co ja robię źle?

Neo
źródło
5
co to jest „wartość”? Czy to tablica? Jeśli tak, var str = value.join (',') może działać dobrze.
StefanS
Tak. Jeśli wykomentuję część .get (), otrzymam okienka z alertami, które wyświetlają „id1: val1”, „id2: val2” itd.
Neo
Czy masz na myśli „... zdobądź odpowiedni rodzaj przedmiotu”? (. Szybkie sprawdzane przed kliknięciem Zadaj pytanie jest zwykle dobrym pomysłem) (Zdjąłem wcześniejszy komentarz, który był raczej silniej umieścić - to pytanie ma wiele . Mniej literówek i takie niż wielu)
TJ Crowder

Odpowiedzi:

131

Jeśli valuejest tablicą asocjacyjną, taki kod będzie działał dobrze:

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>

(dane wyjściowe pojawią się w konsoli programisty)

Jak wspomniał Felix, each()po prostu iteruje tablicę, nic więcej.

Czarodziej cienia to ucho dla Ciebie
źródło
118

Konwersja z tablicy na łańcuch jest taka prosta!

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

To wszystko. Teraz A to ciąg. :)

Człowiek Pająk
źródło
7
Sugerowałbym zamiast tego A.toString (), aby było bardziej jasne, co robisz.
Justin,
8
Jeśli to zrobisz [1,2,[3]].toString(), dostaniesz 1,2,3, co jest dość bzdurą. Ta odpowiedź jest po prostu gorszym sposobem na napisanie tego samego wywołania do tej samej zepsutej, natywnej metody łańcuchowej. 42 głosy za ??
Carl Smith
8
możesz też dołączyć do takiej tablicy['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin
1
Array.join()jest zdecydowanie najlepszą opcją, ponieważ nie będzie po prostu łączyć wartości przecinkami, ale pozwoli użytkownikowi określić, w jaki sposób należy przeprowadzić konkatenację. Możesz na przykład użyć przecinka + spacji.
Felipe Leão
1
To jest dla mnie idealne. Przekazuję tablicę, która zostaje zmieniona na ciąg oddzielony przecinkami bez spacji dla wywołania interfejsu API. Dzięki jeszcze raz.
Nick D
104

Możesz użyć, .toString()aby połączyć tablicę przecinkiem.

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

Lub ustaw separator za pomocą array.join('; '); // result: a; b; c.

Justin
źródło
3
Miałem tylko nadzieję, że tablica zostanie dosłownie przetłumaczona na łańcuch, a następnie będę zmuszony użyć Regex do obcinania tłuszczu, ale to jest o wiele lepsze! Dzięki Justin.
żurawina
52

nie jestem pewien, czy tego chciałeś, ale

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

Powoduje to następujący wynik:

A, B, C

Mikołaja
źródło
1
to najprostszy sposób na świecie, chwała
Jimmy Obonyo Abor,
1
Potrzebowałem dodatkowego miejsca na przecinek, to był jedyny łatwy sposób.
Talha Talip Açıkgöz
1
Najprostszy i łatwy sposób. Dzięki
Raul A.
36

Cztery metody konwersji tablicy na ciąg.

Zmuszanie do struny

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

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

Powołanie .toString()

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

Jawne dołączanie za pomocą .join()

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

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

Możesz użyć innych separatorów, na przykład ', '

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

Za pomocą JSON.stringify()

Jest to czystsze, ponieważ cytuje ciągi znaków wewnątrz tablicy i prawidłowo obsługuje zagnieżdżone tablice.

var arr = JSON.stringify(['a', 'b', 'c']);  // '["a","b","c"]'
VIJAY P
źródło
17

jQuery.eachpo prostu zapętla tablicę, nie robi nic ze zwracaną wartością . Szukasz jQuery.map(też uważam, że nie get()jest to konieczne, ponieważ nie masz do czynienia z obiektami jQuery):

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

PRÓBNY


Ale po co w ogóle używać jQuery w tym przypadku? mapwprowadza tylko niepotrzebne wywołanie funkcji na element.

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

∆: Używa tylko wartości zwracanej, czy ma kontynuować pętlę nad elementami, czy nie. Zwrócenie „fałszywej” wartości zatrzyma pętlę.

Felix Kling
źródło
Wklejałem tutaj „wyczyszczony” kod. Mam do czynienia z obiektami jquery. Dzięki, mapa działa idealnie.
Neo
@Neo: potrzebujesz tylko mapwtedy, gdy valuejest to obiekt jQuery. A potem powinieneś użyć value.map(...).get(). Ale jeśli masz tylko tablicę obiektów jQuery, nie potrzebujesz get. Nie ma za co :)
Felix Kling
9

Posługiwać się join() i separatora.

Przykład roboczy

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

Deepu Reghunath
źródło
4

to moja funkcja, przekonwertuj obiekt lub tablicę na 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+= '}';
}

po prostu edytuję do wersji 0.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')? ' ] ':' } ');;
}
buitanan
źródło
3

Potrzebowałem tablicy, aby stać się String rappresentation tablicy, to znaczy potrzebowałem tego

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']"

może ktoś tego potrzebuje :)

Magico
źródło
2
var arr = new Array();

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

console.log(blkstr);

LUB

var arr = new Array();

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

});

console.log(arr.join(', '));
Santosh Linkha
źródło
2

przekonwertować tablicę na ciąg parametrów GET, który można dołączyć do adresu URL, można wykonać w następujący sposób

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

nazwij tę funkcję jako

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;

która przekieruje użytkownika do / site / search? strona z parametrami get przedstawionymi w tablicy podanej do encodeGet.

Fydo
źródło
1
Zauważ, że jQuery.param (tablica) robi to, co robi encodeGet (tablica).
Curtis Yallop,
1

Nie należy mylić tablic z listami ... To jest lista: {...} i nie ma długości ani innych właściwości tablicy.

To jest Array: [...] i możesz używać funkcji tablicowych, metod itp., Tak jak ktoś zasugerował tutaj: someArray.toString ();

"someObj.toString ();" po prostu nie będzie działać na żadnym innym typie obiektów, takim jak listy. ;-)

Pedro Ferreira
źródło
0

Oto przykład użycia funkcji podkreślenia.

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

Ostateczny wynik to „moe, larry, curly”

sabin
źródło