将JavaScript数组转换为字符串


115

我正在尝试遍历“值”列表,并将其转换为字符串。这是代码:

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

alert()函数可以正常工作并显示正确的值。但是以某种方式,jquery的.get()函数无法获得正确的对象并失败。我究竟做错了什么?


5
什么是“价值”?是数组吗?如果是这样,则var str = value.join(',')可能会正常工作。
StefanS 2011年

是。如果我注释掉.get()部分,则会得到显示“ id1:val1”,“ id2:val2”等的警报框。

你的意思“......得到正确的排序对象”?(点击提问之前快速校对,通常是一个好主意)(我打消了我先前的评论这是相当更强烈地说-这个问题有很多。更少的错别字,比很多这样的)
TJ克罗德

Answers:


130

如果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>

(输出将出现在开发控制台中)

正如Felix提到的那样,each()它只是迭代数组,仅此而已。


118

从数组转换为字符串是如此简单!

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

就是这样,现在A是一个字符串。:)


7
我建议改用A.toString(),这样可以更清楚地知道您在做什么。
贾斯汀

8
如果这样做[1,2,[3]].toString(),您将得到1,2,3,这真是垃圾。这个答案是将相同的调用写入相同的破碎本地字符串方法的一种较差的方法。42票??
卡尔·史密斯

8
您也可以像这样加入一个数组['Sunday','Monday','Tuesday','Wednesday','Thursday'].join('');
etoxin 2014年

1
Array.join()绝对是最好的选择,因为它不会简单地用逗号将值连接起来,而是允许用户确定应如何进行连接。例如,您可以使用逗号+空格。
费利佩·利昂(FelipeLeão),

1
这对我来说是完美的。我正在传递一个数组,该数组已更改为一个用逗号分隔的字符串,没有用于api调用的空格。再次感谢。
尼克D

104

您可以使用.toString()逗号连接数组。

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

或者,用设置分隔符array.join('; '); // result: a; b; c


3
我只是希望将数组按字面意义转换为字符串,然后希望我被迫使用Regex来减少脂肪,但这真是太好了!谢谢贾斯汀。
蔓越莓2014年


36

将数组转换为字符串的四种方法。

强制转换为字符串

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

∆:仅使用返回值,无论是否应继续循环遍历元素。返回“ falsy”值将停止循环。


我有点在这里粘贴“清理”代码。我实际上是在处理jquery对象。谢谢,地图效果很好。

@Neo:仅mapvaluejQuery对象时才需要。然后您应该使用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

可以将数组转换为可以附加到url的GET参数字符串,可以如下进行

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的数组中概述的get参数。


1
请注意,jQuery.param(array)可以完成encodeGet(array)的工作。
Curtis Yallop 2013年

1

不应将Array与Lists混淆。这是一个列表:{...},没有长度或其他Array属性。

这是一个数组:[...],您可以使用数组函数,方法等,就像这里建议的一样:someArray.toString();

“ someObj.toString();” 只是不适用于任何其他对象类型,例如列表。;-)



0

这是使用下划线功能的示例。

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

最终输出为“萌,大,卷曲”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.