Chuyển đổi mảng javascript thành chuỗi


115

Tôi đang cố gắng lặp lại danh sách "giá trị" và chuyển đổi nó thành một chuỗi. Đây là mã:

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

Hàm alert () hoạt động tốt và hiển thị giá trị thích hợp. Nhưng bằng cách nào đó, hàm .get () của jquery không nhận được đúng loại đối tượng và không thành công. Tôi đang làm gì sai?


5
"giá trị" là gì? Nó là một mảng? Nếu vậy var str = value.join (',') có thể hoạt động tốt.
StefanS

Đúng. Nếu tôi nhận xét phần .get (), thì tôi nhận được các hộp cảnh báo hiển thị "id1: val1", "id2: val2", v.v.
Neo

Ý bạn là "... lấy đúng loại đối tượng"? (. Một hiệu đính nhanh chóng trước khi bấm hỏi câu hỏi thường là một ý tưởng tốt) (Tôi đã gỡ bỏ bình luận trước đó của tôi mà khá mạnh mẽ hơn nữa đặt - câu hỏi này có rất nhiều . Lỗi chính tả và ít như vậy hơn nhiều)
TJ Crowder

Câu trả lời:


131

Nếu valuelà mảng liên kết, mã như vậy sẽ hoạt động tốt:

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>

(đầu ra sẽ xuất hiện trong bảng điều khiển dành cho nhà phát triển)

Như Felix đã đề cập, each()chỉ là lặp lại mảng, không có gì hơn.


118

Chuyển đổi từ Mảng sang Chuỗi thật dễ dàng!

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

Vậy là xong Bây giờ A là một chuỗi. :)


7
Tôi sẽ đề xuất A.toString () thay thế để nó rõ ràng hơn những gì bạn đang làm.
Justin

8
Nếu bạn làm vậy [1,2,[3]].toString(), bạn sẽ nhận được 1,2,3, đó là một thứ rác rưởi. Câu trả lời này chỉ là một cách tồi tệ hơn để viết cùng một lệnh gọi đến cùng một phương thức chuỗi gốc, bị hỏng. 42 phiếu ủng hộ ??
Carl Smith

8
bạn cũng có thể tham gia một mảng như vậy['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin 14/12/14

1
Array.join()chắc chắn là tùy chọn tốt nhất, vì nó sẽ không chỉ nối các giá trị bằng dấu phẩy, mà cho phép người dùng xác định cách nối nên được thực hiện. Ví dụ, bạn có thể sử dụng dấu phẩy + khoảng trắng.
Felipe Leão

1
Đây thực sự hoàn hảo đối với tôi. Tôi đang chuyển vào một mảng được thay đổi thành một chuỗi được phân tách bằng dấu phẩy không có dấu cách cho một lệnh gọi api. Cảm ơn một lần nữa.
Nick D

104

Bạn có thể sử dụng .toString()để nối một mảng bằng dấu phẩy.

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

Hoặc, đặt dấu phân cách bằng array.join('; '); // result: a; b; c.


3
Tôi chỉ hy vọng mảng được dịch theo nghĩa đen thành một chuỗi và sau đó tôi buộc phải sử dụng Regex để loại bỏ chất béo, nhưng đây là Oh So Many Better! Cảm ơn Justin.
cranberry

52

không chắc đây có phải là điều bạn muốn không nhưng

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

Điều này dẫn đến kết quả sau:

A, B, C


1
đây là cách đơn giản nhất từ ​​trước đến nay, kudos
Jimmy Obonyo Abor 12/02/16

1
Tôi cần thêm một khoảng trống cho dấu phẩy, đây là cách dễ dàng duy nhất.
Talha Talip Açıkgöz

1
Cách đơn giản và dễ dàng. Cảm ơn
Raul A.

36

Bốn phương pháp để chuyển đổi một mảng thành một chuỗi.

Ép buộc vào một chuỗi

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

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

Kêu gọi .toString()

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

Tham gia rõ ràng bằng cách sử dụng .join()

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

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

Bạn có thể sử dụng các dấu phân tách khác, ví dụ: ', '

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

Sử dụng JSON.stringify()

Điều này rõ ràng hơn, vì nó trích dẫn các chuỗi bên trong mảng và xử lý các mảng lồng nhau đúng cách.

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

17

jQuery.eachchỉ là lặp qua mảng, nó không làm gì với giá trị trả về . Bạn đang tìm kiếm jQuery.map(tôi cũng nghĩ rằng điều đó get()là không cần thiết vì bạn không xử lý các đối tượng jQuery):

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

BẢN GIỚI THIỆU


Nhưng tại sao lại sử dụng jQuery trong trường hợp này? mapchỉ giới thiệu một lệnh gọi hàm không cần thiết cho mỗi phần tử.

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

∆: Nó chỉ sử dụng giá trị trả về cho dù nó có nên tiếp tục lặp qua các phần tử hay không. Trả về giá trị "falsy" sẽ dừng vòng lặp.


Tôi đã dán mã "làm sạch" ở đây. Tôi đang xử lý các đối tượng jquery. Cảm ơn, bản đồ hoạt động hoàn hảo.
Neo

@Neo: Bạn chỉ cần mapif valuelà một đối tượng jQuery. Và sau đó bạn nên sử dụng value.map(...).get(). Nhưng nếu bạn chỉ có một mảng các đối tượng jQuery, thì bạn không cần get. Bạn được chào đón :)
Felix Kling

9

Sử dụng join()và dấu phân cách.

Ví dụ làm việc

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

đây là chức năng của tôi, chuyển đổi đối tượng hoặc mảng thành 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+= '}';
}

tôi chỉ chỉnh sửa thành 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

Tôi cần một mảng để trở thành một bản trình bày chuỗi của một mảng. Ý tôi là tôi cần

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

có lẽ ai đó cần nó :)


2
var arr = new Array();

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

console.log(blkstr);

HOẶC LÀ

var arr = new Array();

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

});

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

2

chuyển đổi một mảng thành một chuỗi tham số GET có thể được nối vào url có thể được thực hiện như sau

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

gọi hàm này là

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;

cái nào sẽ chuyển người dùng đến / site / search? trang có tham số nhận được nêu trong mảng được cung cấp cho encodeGet.


1
Lưu ý rằng jQuery.param (array) thực hiện những gì encodeGet (array).
Curtis Yallop

1

Không nên nhầm lẫn của Mảng với Danh sách ... Đây là danh sách: {...} và không có độ dài hoặc các thuộc tính khác của Mảng.

Đây là một Mảng: [...] và bạn có thể sử dụng các hàm, phương thức của mảng, v.v., giống như ai đó đã đề xuất ở đây: someArray.toString ();

"someObj.toString ();" chỉ sẽ không hoạt động trên bất kỳ loại đối tượng nào khác, như Danh sách. ;-)


0

Array.prototype.toString ()

Phương thức toString () trả về một chuỗi đại diện cho mảng được chỉ định và các phần tử của nó.

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

Cú pháp

arr.toString()

Giá trị trả lại

Một chuỗi đại diện cho các phần tử của mảng.

để biết thêm thông tin :

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


0

Đây là một ví dụ sử dụng hàm gạch dưới.

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

Đầu ra cuối cùng sẽ là "moe, larry, curl"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.