แปลงอาร์เรย์จาวาสคริปต์เป็นสตริง


117

ฉันกำลังพยายามทำซ้ำรายการ "ค่า" และแปลงเป็นสตริง นี่คือรหัส:

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

ฟังก์ชัน alert () ทำงานได้ดีและแสดงค่าที่เหมาะสม แต่อย่างไรก็ตามฟังก์ชัน. get () ของ jquery ไม่ได้เรียงลำดับวัตถุที่ถูกต้องและล้มเหลว ผมทำอะไรผิดหรือเปล่า?


5
"มูลค่า" คืออะไร? มันเป็นอาร์เรย์หรือไม่? หากเป็นเช่นนั้น var str = value.join (',') อาจทำงานได้ดี
StefanS

ใช่. หากฉันแสดงความคิดเห็นในส่วน. get () ฉันจะได้รับกล่องการแจ้งเตือนที่แสดง "id1: val1", "id2: val2" เป็นต้น
นีโอ

คุณหมายถึง "... จัดเรียงวัตถุให้ถูกต้อง" หรือเปล่า? (การพิสูจน์อักษรอย่างรวดเร็วก่อนที่จะคลิกถามคำถามมักเป็นความคิดที่ดี) (ฉันลบความคิดเห็นก่อนหน้านี้ออกซึ่งค่อนข้างจะใส่มาก - คำถามนี้มีการพิมพ์ผิดน้อยกว่ามากและมากกว่าจำนวนมาก)
TJ Crowder

คำตอบ:


132

หากvalueเป็นอาร์เรย์ที่เชื่อมโยงรหัสดังกล่าวจะทำงานได้ดี:

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>

(ผลลัพธ์จะปรากฏในคอนโซลผู้พัฒนา)

ดังที่เฟลิกซ์กล่าวไว้each()เป็นเพียงการทำอาร์เรย์ซ้ำเท่านั้นไม่มีอะไรเพิ่มเติม


119

การแปลงจาก Array เป็น String นั้นง่ายมาก!

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

นั่นคือตอนนี้ A คือสตริง :)


7
ฉันขอแนะนำ A.toString () แทนเพื่อให้ชัดเจนยิ่งขึ้นว่าคุณกำลังทำอะไรอยู่
Justin

8
ถ้าคุณทำ[1,2,[3]].toString()คุณจะได้รับ1,2,3ซึ่งค่อนข้างขยะ คำตอบนี้เป็นเพียงวิธีที่แย่กว่าในการเขียนคำเรียกเดียวกันกับเมธอดสตริงเนทีฟ 42 โหวตขึ้น ??
Carl Smith

8
คุณสามารถเข้าร่วมอาร์เรย์ได้เช่นกัน['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin

1
Array.join()เป็นตัวเลือกที่ดีที่สุดอย่างแน่นอนเนื่องจากจะไม่เพียงแค่เชื่อมต่อค่าด้วยเครื่องหมายจุลภาค แต่อนุญาตให้ผู้ใช้กำหนดวิธีการเชื่อมต่อกัน คุณสามารถใช้ลูกน้ำ + ช่องว่างได้เช่น
Felipe Leão

1
นี้เหมาะสำหรับฉัน ฉันกำลังส่งในอาร์เรย์ซึ่งจะเปลี่ยนเป็นสตริงโดยคั่นด้วยเครื่องหมายจุลภาคโดยไม่มีช่องว่างสำหรับการเรียก API ขอบคุณอีกครั้ง.
Nick D

105

คุณสามารถใช้.toString()เพื่อรวมอาร์เรย์ด้วยลูกน้ำ

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

หรือตั้งค่าตัวคั่นด้วยarray.join('; '); // result: a; b; c.


3
ฉันแค่หวังว่าอาร์เรย์จะถูกแปลเป็นสตริงอย่างแท้จริงและสำหรับฉันแล้วฉันก็ถูกบังคับให้ใช้ Regex เพื่อตัดไขมันออก แต่นี่คือ Oh So Very Better! ขอบคุณจัสติน
cranberry

53

ไม่แน่ใจว่านี่คือสิ่งที่คุณต้องการหรือไม่ แต่

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

ผลลัพธ์นี้ได้ผลลัพธ์ต่อไปนี้:

ก, ข, ค


1
นี่เป็นวิธีที่ง่ายที่สุดเท่าที่เคยมีมาความรุ่งโรจน์
Jimmy Obonyo Abor

1
ฉันต้องการพื้นที่เพิ่มหนึ่งช่องสำหรับลูกน้ำนี่เป็นวิธีง่ายๆเพียงวิธีเดียว
Talha Talip Açıkgöz

1
วิธีที่ง่ายและสะดวกที่สุด ขอบคุณ
ราอูลอ.

37

สี่วิธีในการแปลงอาร์เรย์เป็นสตริง

บังคับให้เป็นสตริง

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

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

การเรียกร้อง .toString()

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

เข้าร่วมอย่างชัดเจนโดยใช้ .join()

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

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

คุณสามารถใช้ตัวคั่นอื่น ๆ ตัวอย่างเช่น ', '

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

การใช้ JSON.stringify()

สิ่งนี้จะสะอาดกว่าเนื่องจากใส่เครื่องหมายคำพูดสตริงภายในอาร์เรย์และจัดการอาร์เรย์ที่ซ้อนกันอย่างเหมาะสม

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

17

jQuery.eachเป็นเพียงการวนลูปกับอาร์เรย์ก็ไม่ได้ทำอะไรกับค่าตอบแทนΔ คุณกำลังมองหาjQuery.map(ฉันคิดว่าget()มันไม่จำเป็นเนื่องจากคุณไม่ได้จัดการกับวัตถุ jQuery):

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

การสาธิต


แต่ทำไมต้องใช้ jQuery ในกรณีนี้? mapแนะนำการเรียกใช้ฟังก์ชันที่ไม่จำเป็นต่อองค์ประกอบเท่านั้น

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

∆: ใช้เฉพาะค่าส่งคืนว่าควรวนซ้ำองค์ประกอบต่อไปหรือไม่ การส่งคืนค่า "เท็จ" จะหยุดการวนซ้ำ


ฉันวางโค้ดแบบ "ล้าง" ที่นี่ ฉันไม่สามารถจัดการกับวัตถุ jquery ได้ ขอบคุณแผนที่ทำงานได้อย่างสมบูรณ์
นีโอ

@Neo: คุณต้องการก็ต่อmapเมื่อvalueเป็นวัตถุ jQuery แล้วคุณควรใช้value.map(...).get(). แต่ถ้าคุณเพียงแค่มีอาร์เรย์ของวัตถุ jQuery getแล้วคุณไม่จำเป็นต้อง ยินดีต้อนรับ :)
Felix Kling

9

ใช้join()และตัวคั่น

ตัวอย่างการทำงาน

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

นี่คือฟังก์ชันของฉันแปลงวัตถุหรืออาร์เรย์เป็น 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+= '}';
}

ฉันเพิ่งแก้ไขเป็น 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')? ' ] ':' } ');;
}

3

ฉันต้องการอาร์เรย์เพื่อให้กลายเป็นการนำเสนอสตริงของอาร์เรย์ฉันหมายความว่าฉันต้องการสิ่งนั้น

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

อาจจะมีคนต้องการ :)


2
var arr = new Array();

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

console.log(blkstr);

หรือ

var arr = new Array();

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

});

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

2

การแปลงอาร์เรย์เป็นสตริงพารามิเตอร์ GET ที่สามารถต่อท้าย url ทำได้ดังนี้

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

เรียกฟังก์ชันนี้ว่า

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;

ซึ่งจะส่งต่อผู้ใช้ไปยัง / site / search? หน้าที่มีพารามิเตอร์รับที่ระบุไว้ในอาร์เรย์ที่กำหนดให้กับ encodeGet


1
โปรดสังเกตว่า jQuery.param (อาร์เรย์) ทำสิ่งที่ encodeGet (อาร์เรย์) ทำ
Curtis Yallop

1

ไม่ควรสับสนระหว่าง Array กับ Lists ... นี่คือรายการ: {... } และไม่มีความยาวหรือคุณสมบัติอื่น ๆ ของ Array

นี่คือ Array: [... ] และคุณสามารถใช้ฟังก์ชันอาร์เรย์วิธีการและอื่น ๆ ได้เหมือนที่มีคนแนะนำที่นี่: someArray.toString ();

"someObj.toString ();" ก็จะไม่ทำงานกับวัตถุประเภทอื่น ๆ เช่นรายการ ;-)


0

Array.prototype.toString ()

toString () วิธีการส่งคืนสตริงที่แสดงอาร์เรย์ที่ระบุและองค์ประกอบ

var months = ["Jan", "Feb", "Mar", "Apr"];
months.toString(); // "Jan,Feb,Mar,Apr"

วากยสัมพันธ์

arr.toString()

ส่งคืนค่า

สตริงที่แสดงองค์ประกอบของอาร์เรย์

สำหรับข้อมูลเพิ่มเติม :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString


0

นี่คือตัวอย่างการใช้ฟังก์ชันขีดล่าง

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

ผลลัพธ์สุดท้ายจะเป็น "moe, larry, curly"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.