将值字符串转换为Javascript数组的优雅方法?

5

我有一个ajax请求,返回如下列表:

"1,2,3,4,5,6"

我需要一个由数字组成的javascript数组:
[1,2,3,4,5,6]

我尝试过:

var array = new Array("1,2,3,4,5,6".split(","))

但输出中的数字仍然是字符串:

["1","2","3","4","5","6"]

有没有一种简单的方法将其作为编号数组呈现?最好不要编写一个迭代它的函数。
6个回答

13

你需要循环并将它们转换为数字,就像这样:

var array = "1,2,3,4,5,6".split(",");
for(var i=0; i<array.length; i++) array[i] = +array[i];

或者,更传统的例子:

var array = "1,2,3,4,5,6".split(",");
for(var i=0; i<array.length; i++) array[i] = parseInt(array[i], 10);

2
for(var i = array.length; i; array[--i] = +array[i]); 可以翻译为:对于变量i等于数组长度,当i存在时,将数组的第i个元素转换为数字类型并赋值给第i个元素。 - Mic

2

使用更加以jQuery为中心的方法,可以使用jQuery.map()

var str = "1,2,3,4,5,6";
var arr = $.map(str.split(","), function(el) { return parseInt(el, 10); });

1

不确定这是否算作编写函数,但您可以在 jQuery 中使用 map 函数。我看到您将其列为标签,因此我假设您正在使用:

var stringArray = "1,2,3,4,5,6".split(",");
var numberArray = $.map(stringArray,
    function(item, i)
    {
        return parseInt(item, 10);
    });

1

// jQuery必须有一种方法来做任何现代浏览器可以做到的事情:

var str= "1,2,3,4,5,6";
var arr= str.split(',').map(Number);

// returns an array of numbers

0

如果您信任ajax响应,并且(出于任何原因)您承诺不使用循环,您可以始终选择eval

var str = "1,2,3,4,5,6";
var array = eval("[" + str + "]");

eval有自己的几个问题(例如:它比循环慢得多),如果有其他选项可用,我不建议使用它。 - albertov
1
或者,如果您不信任ajax响应,只需执行var array = JSON.parse('['+ str +']'); - Thomas

0

如果您不想显式迭代,可以使用array.map,即JavaScript的map函数。

array.map(callbackFunc, array);

var arr = array.map(function(x) {return parseInt(x);}, "1,2,3,4,5,6".split(","));

http://www.tutorialspoint.com/javascript/array_map.htm

可能有更好的参考资料,但我不常用JavaScript,所以没有一个好的参考网站。

编辑 - 我看到jQuery有自己的地图,这可能值得研究。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接