如何在Node.js中拆分字符串?

9

我的数组:

var str=['data1,data2 '];

我已经使用过:

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

但是出现了一个错误。TypeError: 对象data1,data2没有split方法。我该如何解决这个问题。

我的输出将是:

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

我该如何解决这个问题?
4个回答

15

你应该这样做:

var arr = str.toString().split(",");
"TypeError: Object data1,data2 has no method 'split'" 表示该变量被视为非字符串。因此,您必须进行类型转换。
var str = [];
var str = ['data1,data2','data3,data4'];
var str = [someVariable]; 

str[0].split(",")会完全失败,如果str保存了一个空数组,或者不是一个String.prototype,或者str保存了多个字符串的话,将无法给出令人满意的结果。盲目地使用str[0].split(",")并信任str总是恰好保持1个字符串而永远不会有其他内容是不好的实践方式。 toString()方法支持数字、数组、对象、布尔值、日期,甚至函数;而str[0].split()存在巨大的潜在错误风险,并可能导致代码执行中断和应用程序崩溃。

如果你真的非常想使用str[0].split(),那么至少进行一些最小的类型检查:

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

尽管如此,您仍然指望数组的.toString()实现始终使用,作为其自己的分隔符。这并非铁板钉钉。如果将来某个浏览器决定改用换行符怎么办? - Shadow The Spring Wizard
1
我的意思是你假设 ['data1,data2','data3,data4'] .toString() 将返回 'data1,data2,data3,data4' - 我认为这并不是一定的。最好的方法是自己连接它,即 ['data1,data2','data3,data4'].join(',') - Shadow The Spring Wizard
@ShadowWizard,是的!现在我明白你的意思了,指的是str = ['data1,data2','data3,data4'] - 你说得完全正确!我们不能确定浏览器或者在这种情况下的V8将来是否会返回data1,data2,data3,data4 - davidkonrad

5
如果你的起点是一个包含字符串的数组。这应该可以工作:
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);


1
这应该是最佳答案。当前的获胜者只是一个肮脏的解决方法,没有教任何东西。 - Clint Eastwood
2
@Jonathan - 我完全不认为 Array.toString() 是一个“脏的解决办法”。实际上,这是一种安全可靠的方法。我认为 str[0].split(",") 有可能会导致整个应用程序崩溃,这是非常明显的。我已经更新了我的回答来解释其中的原因。 - davidkonrad
1
@davidkonrad 添加了一个编辑,以包括该数组中多个字符串的情况。 - Sergio

3

正如您所说,str是一个数组(只有一个元素)。如果您想分割包含在数组中的字符串,您首先需要访问该数组:

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

-1

假设我们有两个日期:

日期1:17/01/1989

日期2: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]);

如果(a < b){

alert("date2 大于 date1")}

} else if(a > b){

alert("date1 大于 date2")

} else{

alert("date 1 和 date2 相等");

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接