我的阵列:
var str=['data1,data2 '];
我用过:
var arr = str.split(",");
但是显示了一个错误。 TypeError:对象data1,data2没有方法'split'。我该如何解决这个问题。
我的输出将是:
arr= data1,data2
// or
arr[0]=data1;
arr[1]=data2;
我该如何解决这个问题?
答案 0 :(得分:12)
你应该这样做:
var arr = str.toString().split(",");
“ TypeError:对象data1,data2没有方法'split'”表示该变量不被视为字符串。因此,您必须对其进行类型转换。
更新08.10.2015 我注意到有人认为上面的答案是“脏的解决方法”,令人惊讶的是这条评论被赞成。实际上它完全相反 - 使用str[0].split(",")
作为3(!)其他建议是真正的“脏解决方法”。为什么?考虑在这些情况下会发生什么:
var str = [];
var str = ['data1,data2','data3,data4'];
var str = [someVariable];
{p> str[0].split(",")
将尽快完全失败str
持有一个空数组,由于某种原因不会持有String.prototype
或者如果str
持有的数量超过str[0].split(",")
则会给出不满意的结果一弦。使用str
盲目地相信toString()
总是会完全保留1个字符串而绝不是其他不好的做法。 str[0].split()
由数字,数组,对象,布尔值,日期甚至函数支持; str[0].split()
极有可能引发错误并阻止在范围内进一步执行,并使整个应用程序崩溃。
如果你真的,真的想使用var arr;
if (typeof str[0] == 'string') {
arr = str[0].split(',')
} else {
arr = [];
}
,那么至少要进行一些最小类型检查:
{{1}}
答案 1 :(得分:5)
如果你的起点是array
,里面有string
。这应该有效:
var arr = str[0].split(",");
否则,您应该以字符串作为代码的起点,以便按预期工作:
var str = 'data1,data2';
如果数组中有更多元素,则需要使用for循环迭代它们。
如果你在该数组中有多个字符串,那么你应该更加小心并做一些这样的事情:
var str = ['data1,data2 ', ' data3, data4 ']; // notice these strings have many spaces in different places
var longString = str.join(',');
var array = longString.split(',').map(s => s.trim()).filter(Boolean); // removing spaces from start and end of strings, and eventually removing empty positions
console.log(array);
答案 2 :(得分:3)
正如你所说,str
是一个数组(有一个元素)。如果要拆分数组中包含的字符串,则必须首先访问数组:
var arr = str[0].split(",");
答案 3 :(得分:-1)
让我们说我们有两个日期:
date1:1989年1月17日
date2:20/02/2000
如果我们想要比较它们只需拆分字符串并像这样比较
var date1= date1.toString().split("/");
var date2= date2.toString().split("/");
var a = parseInt(date1[2] + date1[1] + date1[0]);
var b = parseInt(date2[2] + date2[1] + date2[0]);
if(a< b){
提醒(" date2大于date1")}
} 否则如果(a> b){
警告(" date1大于date2")
} 否则{
警告("日期1和日期2等于");
}