Javascript 鲁棒字符串拆分

Javascript 鲁棒字符串拆分,javascript,Javascript,我有一个JavaScript函数: function doSomething(arg) { var array = arg.split(','); // etc... } arg是使用jQuery的.data('myId')函数填充的 通常,myId包含一个逗号分隔的整数列表,代码运行良好。但是,如果myId仅包含一个整数,则代码将失败并显示错误 对象不支持属性或方法“拆分” 是否有一种紧凑、健壮的方法来创建数组,而不包括if语句来处理一个整数或空字符串的边界条件?您有两个不相

我有一个JavaScript函数:

function doSomething(arg) {
    var array = arg.split(',');
    // etc...
}
arg
是使用jQuery的
.data('myId')
函数填充的

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

对象不支持属性或方法“拆分”


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

您有两个不相关的问题

第一个用于空字符串的情况:Split将返回一个包含空字符串的单元素数组。只要检查一下并赔偿

var array;
if (arg == "") array = [];
如果只有一个整数,我相信您不是从
.data()
中获取字符串,而是实际的整数;因此,首先将其转换为字符串:

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

或者,您可以避免jQuery的魔力,直接访问属性-所有
data()
属性都是前缀为
data-
的属性。

您有两个不相关的问题

第一个用于空字符串的情况:Split将返回一个包含空字符串的单元素数组。只要检查一下并赔偿

var array;
if (arg == "") array = [];
如果只有一个整数,我相信您不是从
.data()
中获取字符串,而是实际的整数;因此,首先将其转换为字符串:

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

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

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


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

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


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

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

else array = String(arg).split(',');
('' + arg).split(',')
//or
String(arg).split(',')
事实上,我不确定一个是否是首选

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


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

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

else array = String(arg).split(',');
('' + arg).split(',')
//or
String(arg).split(',')
事实上,我不确定一个是否是首选

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

另一种可能的选择是对元素本身使用
dataset