Ubah larik javascript menjadi string

115

Saya mencoba mengulang daftar "nilai" dan mengubahnya menjadi string. Ini kodenya:

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

alert () berfungsi dengan baik dan menampilkan nilai yang tepat. Tapi entah bagaimana, fungsi .get () jquery tidak mendapatkan jenis objek yang tepat dan gagal. Apa yang saya lakukan salah?

Neo
sumber
5
apa itu "nilai"? Apakah itu sebuah array? Jika demikian, var str = value.join (',') mungkin berfungsi dengan baik.
StefanS
Iya. Jika saya mengomentari bagian .get (), maka saya mendapatkan kotak peringatan yang menampilkan "id1: val1", "id2: val2" dll.
Neo
Apakah maksud Anda "... mendapatkan jenis objek yang tepat"? (Koreksi cepat sebelum mengklik Ajukan Pertanyaan biasanya merupakan ide yang bagus.) (Saya menghapus komentar saya sebelumnya yang agak lebih tegas - pertanyaan ini memiliki kesalahan ketik yang jauh lebih sedikit dan semacamnya daripada banyak.)
TJ Crowder

Jawaban:

131

Jika valueadalah array asosiatif, kode tersebut akan berfungsi dengan baik:

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>

(keluaran akan muncul di konsol dev)

Seperti yang Felix sebutkan, each()hanya mengulang array, tidak lebih.

Shadow Wizard adalah Ear For You
sumber
118

Mengonversi Dari Array ke String Sangat Mudah!

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

Itu saja Sekarang A adalah string. :)

Manusia laba-laba
sumber
7
Saya akan menyarankan A.toString () sebagai gantinya sehingga lebih jelas apa yang Anda lakukan.
Justin
8
Jika Anda melakukannya [1,2,[3]].toString(), Anda akan mendapatkan 1,2,3, yang sangat sampah. Jawaban ini hanyalah cara yang lebih buruk untuk menulis panggilan yang sama ke metode string asli yang rusak dan sama. 42 suara positif ??
Carl Smith
8
Anda juga dapat bergabung dengan array seperti so['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin
1
Array.join()jelas merupakan opsi terbaik, karena tidak hanya menggabungkan nilai dengan koma, tetapi memungkinkan pengguna untuk menentukan bagaimana penggabungan harus dilakukan. Anda bisa menggunakan koma + spasi kosong misalnya.
Felipe Leão
1
Ini sempurna untukku. Saya meneruskan sebuah array yang diubah menjadi string yang dipisahkan dengan koma tanpa spasi untuk panggilan api. Terima kasih lagi.
Nick D
104

Anda dapat menggunakan .toString()untuk menggabungkan array dengan koma.

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

Atau, atur pemisah dengan array.join('; '); // result: a; b; c.

Justin
sumber
3
Saya hanya berharap agar array secara harfiah diterjemahkan ke dalam string dan bagi saya untuk kemudian dipaksa menggunakan Regex untuk memangkas lemak, tetapi ini Oh Jauh Lebih Baik! Terima kasih Justin.
cranberry
52

tidak yakin apakah ini yang Anda inginkan tetapi

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

Ini menghasilkan keluaran berikut:

A, B, C

Nicholas
sumber
1
ini adalah cara termudah yang pernah ada, pujian
Jimmy Obonyo Abor
1
Saya membutuhkan satu spasi ekstra untuk koma, ini adalah satu-satunya cara yang mudah .
Talha Talip Açıkgöz
1
Cara paling sederhana dan mudah. Terima kasih
Raul
36

Empat metode untuk mengubah array menjadi string.

Memaksa seutas tali

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

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

Panggilan .toString()

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

Bergabung secara eksplisit menggunakan .join()

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

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

Anda dapat menggunakan pemisah lain, misalnya, ', '

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

Menggunakan JSON.stringify()

Ini lebih bersih, karena mengutip string di dalam larik dan menangani larik bersarang dengan benar.

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

jQuery.eachhanya mengulang array, itu tidak melakukan apa pun dengan nilai yang dikembalikan . Anda mencari jQuery.map(menurut saya itu juga get()tidak perlu karena Anda tidak berurusan dengan objek jQuery):

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

DEMO


Tetapi mengapa menggunakan jQuery sama sekali dalam kasus ini? maphanya memperkenalkan pemanggilan fungsi yang tidak perlu per elemen.

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

∆: Ini hanya menggunakan nilai yang dikembalikan apakah harus terus mengulang elemen atau tidak. Mengembalikan nilai "falsy" akan menghentikan pengulangan.

Felix Kling
sumber
Saya semacam menempelkan kode "dibersihkan" di sini. Saya benar-benar berurusan dengan objek jquery. Terima kasih, peta berfungsi dengan sempurna.
Neo
@ Neo: Anda hanya perlu mapjika valueadalah objek jQuery. Dan kemudian Anda harus menggunakan value.map(...).get(). Tetapi jika Anda hanya memiliki array objek jQuery, maka Anda tidak perlu get. Sama-sama :)
Felix Kling
9

Gunakan join()dan pemisah.

Contoh kerja

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
sumber
4

ini fungsi saya, ubah objek atau larik ke 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+= '}';
}

saya hanya mengedit ke 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')? ' ] ':' } ');;
}
buitanan
sumber
3

Saya membutuhkan sebuah array untuk menjadi representasi String dari sebuah array, maksud saya, saya membutuhkannya

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

mungkin seseorang membutuhkannya :)

Magico
sumber
2
var arr = new Array();

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

console.log(blkstr);

ATAU

var arr = new Array();

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

});

console.log(arr.join(', '));
Santosh Linkha
sumber
2

mengonversi array menjadi string parameter GET yang dapat ditambahkan ke url dapat dilakukan sebagai berikut

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

sebut fungsi ini sebagai

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;

yang akan meneruskan pengguna ke / situs / penelusuran? halaman dengan parameter get yang diuraikan dalam larik yang diberikan untuk encodeGet.

Fydo
sumber
1
Perhatikan bahwa jQuery.param (array) melakukan apa yang dilakukan encodeGet (array).
Curtis Yallop
1

Tidak boleh membingungkan Array dengan List ... Ini adalah daftar: {...} dan tidak memiliki panjang, atau properti Array lainnya.

Ini adalah Array: [...] dan Anda dapat menggunakan fungsi array, metode dan sebagainya, seperti yang disarankan di sini: someArray.toString ();

"someObj.toString ();" hanya tidak akan berfungsi pada jenis objek lain, seperti Daftar. ;-)

Pedro Ferreira
sumber
0

Berikut contoh penggunaan fungsi garis bawah.

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

Hasil akhirnya adalah "moe, larry, curly"

sabin
sumber