$ .makeArray没有按预期工作?

时间:2014-01-03 18:47:20

标签: jquery arrays

我想得到这样的最终结果:

emails: Array[4]
    0: "Athos"
    1: "Aramis"
    2: "Porthos"
    3: "D'Artagnan"
length: 4

但是,当我像这样使用$.makeArray时:

$.makeArray( names );

这就是我得到的:

emails: Array[1]
    0: "Athos, Aramis, Porthos, D'Artagnan"
length: 1

var names来自textarea值:$("textarea").val()

我应该使用push还是别的?或者我对$.makeArray做错了什么?

2 个答案:

答案 0 :(得分:2)

$.makeArray

  

Convert an array-like object into a true JavaScript array

您似乎正在将字符串"Athos, Aramis, Porthos, D'Artagnan"传递给makeArray。字符串类似于数组,因此jQuery将无法对其执行任何操作,因此,它只是创建一个包含单个字符串的数组。 makeArray不是正确的功能。

相反,使用String.split将字符串分解为数组。

var str = "Athos, Aramis, Porthos, D'Artagnan";
var values = str.split(",")

console.log(values) // ["Athos", " Aramis", " Porthos", " D'Artagnan"]

请注意,您仍会在数组中的字符串中有前导空格。您可能有兴趣通过更新split以使用与空格匹配的正则表达式来修剪这些内容。

var values = str.split(/\s*[,]\s*/g)
console.log(values) // ["Athos", "Aramis", "Porthos", "D'Artagnan"]

答案 1 :(得分:0)

好的,$.makeArray()不是为此而做的。这实际上将jquery节点数组转换为普通数组。

就像你选择节点$("p")一样,它就像在jQuerified数组中一样,并且你想要将这个数组转换为普通数组。然后你可以使用$.makeArray();

对于你当前的问题,你shpuld喜欢:

$(function(){
    var val = $.trim($("textarea").val()).replace("/\s/gi", "").split(",");
    console.log(val);
});

这里是jsfiddle:http://jsfiddle.net/ashishanexpert/yQXzR/