JavaScript dizisini dizeye dönüştür


115

Bir "değer" listesi üzerinde yineleme yapmaya ve onu bir dizeye dönüştürmeye çalışıyorum. İşte kod:

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

alert () işlevi gayet iyi çalışıyor ve uygun değeri gösteriyor. Ancak bir şekilde jquery'nin .get () işlevi doğru türde nesneyi alamaz ve başarısız olur. Neyi yanlış yapıyorum?


5
"değer" nedir? Bir dizi mi? Eğer öyleyse, var str = value.join (',') gayet iyi çalışabilir.
StefanS

Evet. .Get () kısmına yorum yaparsam, "id1: val1", "id2: val2" vb. Görüntüleyen uyarı kutuları alırım.
Neo

Eğer "... sağ olsun ifade ediyor tür nesne"? (Soru Sor'u tıklamadan önce hızlı bir düzeltme genellikle iyi bir fikirdir.) (Oldukça daha güçlü bir şekilde ifade edilen önceki yorumumu kaldırdım - bu sorunun çok daha az yazım hatası var ve çok daha fazlası.)
TJ Crowder

Yanıtlar:


131

Eğer valueilişkili dizi olan bu tür kod cezası çalışacaktır:

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>

(çıktı geliştirici konsolunda görünecek)

Felix'in bahsettiği gibi each(), sadece diziyi yineliyor, daha fazlası değil.


118

Diziden Dizeye Dönüştürmek Çok Kolay!

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

İşte bu Şimdi A bir dizedir. :)


7
Bunun yerine A.toString () 'i öneririm, böylece ne yaptığınız daha net.
Justin

8
Eğer yaparsan [1,2,[3]].toString(), alacaksın 1,2,3ki bu oldukça saçma. Bu yanıt, aynı çağrıyı aynı bozuk, yerel dize yöntemine yazmanın daha kötü bir yoludur. 42 olumlu oy ??
Carl Smith

8
Ayrıca böyle bir diziye de katılabilirsiniz['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoksin

1
Array.join()kesinlikle en iyi seçenektir, çünkü değerleri virgüllerle birleştirmekle kalmaz, aynı zamanda kullanıcının birleştirme işleminin nasıl yapılacağını belirlemesine izin verir. Örneğin virgül + boşluk kullanabilirsiniz.
Felipe Leão

1
Bu benim için mükemmel. Bir api çağrısı için boşluk içermeyen virgülle ayrılmış bir dizeye değiştirilen bir dizi geçiriyorum. Tekrar teşekkürler.
Nick D

104

.toString()Bir diziyi virgülle birleştirmek için kullanabilirsiniz .

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

Veya ayırıcıyı ile ayarlayın array.join('; '); // result: a; b; c.


3
Dizinin tam anlamıyla bir dizeye çevrilmesini ve daha sonra Regex'i kullanarak yağları kesmek için zorlanmamı umuyordum, ama bu Oh Çok Daha İyi! Teşekkürler Justin.
kızılcık

52

istediğinin bu olup olmadığından emin değilim ama

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

Bu, aşağıdaki çıktıyla sonuçlanır:

A, B, C


1
bu şimdiye kadarki en basit yol, tebrikler
Jimmy Obonyo Abor

1
Virgül için fazladan bir boşluğa ihtiyacım vardı, bu tek kolay yoldu.
Talha Talip Açıkgöz

1
En basit ve kolay yol. Teşekkürler
Raul A.

36

Bir diziyi dizeye dönüştürmek için dört yöntem.

Bir dizeye zorlama

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

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

çağrı .toString()

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

Kullanarak açıkça katılma .join()

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

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

Diğer ayırıcıları kullanabilirsiniz, örneğin, ', '

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

kullanma JSON.stringify()

Bu, dizinin içindeki dizeleri tırnak içine aldığı ve iç içe dizileri düzgün şekilde işlediği için daha temizdir.

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

17

jQuery.eachsadece dizi üzerinde döngü yapıyor, dönüş değeri ile hiçbir şey yapmıyor . Aradığınız jQuery.map(Ben de düşünüyorum get()jQuery ile nesneleri uğraşmıyoruz olarak gereksizdir):

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

DEMO


Ama bu durumda neden jQuery kullanasınız? mapsadece eleman başına gereksiz bir işlev çağrısı getirir.

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

∆: Öğeler üzerinde döngüye devam edip etmeyeceğine bakılmaksızın yalnızca dönüş değerini kullanır. "Yanlış" bir değer döndürmek döngüyü durdurur.


Buraya "temizlenmiş" kodu yapıştırdım. Aslında jquery nesneleriyle uğraşıyorum. Teşekkürler, harita mükemmel çalışıyor.
Neo

@Neo: Yalnızca ihtiyaç maphalinde valuebir jQuery nesnesidir. Ve sonra kullanmalısın value.map(...).get(). Ancak bir dizi jQuery nesnesine sahipseniz, buna ihtiyacınız yok get.
Rica ederim

9

join()Ayırıcı kullanın .

Çalışma örneği

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

bu benim fonksiyonum, nesneyi veya diziyi json'a dönüştür

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+= '}';
}

sadece v0.2 ^. ^ olarak düzenlerim

 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

Bir dizinin bir dizinin dizgi uyumu haline gelmesi için bir diziye ihtiyacım vardı yani buna ihtiyacım vardı

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

belki birinin buna ihtiyacı vardır :)


2
var arr = new Array();

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

console.log(blkstr);

VEYA

var arr = new Array();

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

});

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

2

bir diziyi bir url'ye eklenebilecek bir GET param dizesine dönüştürmek aşağıdaki gibi yapılabilir

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

bu işlevi şöyle çağır

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;

kullanıcıyı / site / aramaya yönlendiren nedir? EncodeGet'e verilen dizide özetlenen get parametrelerinin bulunduğu sayfa.


1
JQuery.param (array) 'in encodeGet (array)' in yaptığını yaptığını unutmayın.
Curtis Yallop

1

Dizileri Listelerle karıştırmamalı ... Bu bir listedir: {...} ve uzunluk veya diğer Dizi özellikleri yoktur.

Bu bir Dizidir: [...] ve burada birinin önerdiği gibi dizi işlevlerini, yöntemlerini ve benzerlerini kullanabilirsiniz: someArray.toString ();

"() SomeObj.toString;" Listeler gibi başka herhangi bir nesne türü üzerinde çalışmayacaktır. ;-)



0

Alt çizgi işlevlerinin kullanıldığı bir örnek aşağıda verilmiştir.

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

Nihai çıktı "moe, larry, curly" olacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.