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.