强大的字符串拆分

时间:2013-02-25 01:22:14

标签: javascript

我有一个JavaScript函数:

function doSomething(arg) {
    var array = arg.split(',');
    // etc...
}

arg使用jQuery的.data('myId')函数填充。

通常,myId包含逗号分隔的整数列表,代码效果很好。但是,如果myId仅包含一个整数,则代码将失败并显示错误

  

对象不支持属性或方法'split'

是否有一个紧凑,健壮的方法来创建数组而不包含if语句来处理一个整数或空字符串的边界条件?

3 个答案:

答案 0 :(得分:2)

attr将返回一个字符串,而data将尝试解析该值并返回一个具有“正确”类型的对象。

foo.attr('data-myId');  //pass this instead

但是,如果没有if,您无法识别空字符串。您需要检查它,或者需要检查具有单个空字符串元素的数组。

答案 1 :(得分:1)

你有两个无关的问题。

第一个是空字符串的情况:Split将返回一个带有空字符串的单元素数组。只需检查并补偿。

var array;
if (arg == "") array = [];

如果有一个整数,我相信你没有从.data()得到一个字符串,而是一个实际的整数;所以首先将其转换为字符串:

else array = String(arg).split(',');

或者,您可以避免使用jQuery魔法,并直接访问该属性 - 所有data()属性都只是带有data-前缀的属性。

答案 2 :(得分:1)

.data将尝试根据其内容猜测值的类型,因此它将成为一个数字。您可以使用.attr,如果它可用作属性,则始终返回一个字符串。或者,强制转换为字符串:

('' + arg).split(',')
//or
String(arg).split(',')

我实际上不确定是否首选。

另请注意''.split(',')返回['']或带有空字符串元素的数组。您可以使用.filter(function (elem) { return elem !== ''; })

来解决这个问题

另一种可能的替代方法是在元素本身上使用dataset