如何通过节点Js拆分string?

我的arrays:

var str=['data1,data2 ']; 

我用过:

 var arr = str.split(","); 

但是显示了一个错误。 TypeError:对象data1,data2没有方法“split”。 我怎么解决这个问题。

我的输出将是:

 arr= data1,data2 // or arr[0]=data1; arr[1]=data2; 

我怎么解决这个问题 ?

你应该做这个 :

 var arr = str.toString().split(","); 

TypeError:对象data1,data2没有方法'split' ”表示该variables不被视为一个string。 因此,你必须改变它。


更新08.10.2015我注意到有人认为上面的答案是一个“ 肮脏的解决方法 ”,令人惊讶的是这个评论是upvoted。 事实上,它恰恰相反 – 使用str[0].split(",")作为3(!),其他build议是真正的“肮脏的解决方法”。 为什么? 考虑在这些情况下会发生什么情况:

 var str = []; var str = ['data1,data2','data3,data4']; var str = [someVariable]; 

str[0].split(",")将尽快失败,只要str保存一个空数组,由于某种原因,不会持有一个String.prototype或者如果str持有多个string,会导致不满意的结果。 使用str[0].split(",")盲目地相信str总是会保存1个string,绝不是别的做法。 toString()由数字,数组,对象,布尔值,date甚至函数支持; str[0].split()具有引发错误的巨大潜力,并停止在作用域中的进一步执行,并导致整个应用程序崩溃。

如果你真的想要使用str[0].split()那么至less要做一些最小的types检查:

 var arr; if (typeof str[0] == 'string') { arr = str[0].split(',') } else { arr = []; } 

如果你的起点是一个带有stringarray 。 这应该工作:

 var arr = str[0].split(","); 

否则,您应该有一个string作为您的代码工作的预期的起点:

 var str = 'data1,data2'; 

如果数组中有更多元素,则需要用for循环来迭代它们。

编辑添加其他情况:

如果你在这个数组中有几个string,那么你应该更加小心,做这样的事情:

 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); 

正如你所说, str是一个数组(有一个元素)。 如果要拆分数组中包含的string,则必须先访问数组:

 var arr = str[0].split(","); 

假设我们有两个date:

date1:17/01/1989

date2:20/02/2000

如果我们想比较他们只是分割string,并像这样比较

 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]); 

如果(a <b){

警报(“date2大于date1”)}

} else if(a> b){

警报(“date1大于date2”)

} else {

警报(“date1和date2是等于”);

}