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?


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.


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


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.


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


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

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


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


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')? ' ] ':' } ');;
}

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


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

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.


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



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”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.