Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript筛选器函数不允许删除换行符_Javascript_String_Newline_Strip - Fatal编程技术网

Javascript筛选器函数不允许删除换行符

Javascript筛选器函数不允许删除换行符,javascript,string,newline,strip,Javascript,String,Newline,Strip,我是Javascript新手,不明白为什么以下两种方法的输出会产生不同的结果 在第一个示例(方法1)中,我从一个空字符串开始,然后循环遍历示例文本的每个单词,并检查它是否是字母数字序列(即word.trim()!==emptyString) 在第二个示例(method2)中,我尝试使用filter函数执行相同的操作,方法是删除所有非字母数字的单词(换行符、空格、制表符等),然后使用join命令将所有内容“粘合”在一起 以下是我的做法: //示例文本 //请注意换行符 让文本= “引用地球上所有

我是Javascript新手,不明白为什么以下两种方法的输出会产生不同的结果

在第一个示例(
方法1
)中,我从一个空字符串开始,然后循环遍历示例文本的每个单词,并检查它是否是字母数字序列(即word.trim()!==emptyString)

在第二个示例(
method2
)中,我尝试使用
filter
函数执行相同的操作,方法是删除所有非字母数字的单词(换行符、空格、制表符等),然后使用
join
命令将所有内容“粘合”在一起

以下是我的做法:

//示例文本
//请注意换行符
让文本=
“引用地球上所有国王的话\n”+
“他是人类中最温和、最受爱戴的人\n”+
“至亲至善,至善至善”;
//方法1
让我们一起去吧;
for(将文本中的单词拆分为(“”){
if(word.trim()!==“”){
过滤+=word.trim()+“”;//通过连接填充单词
}
}
console.log(已筛选,'\n');//------------输出一
//方法2-使用过滤函数
让输出=text.split(“”).filter(函数(word){
返回word.trim()!==“”?单词:“”;
}).join(“”;//通过join()方法填充单词

console.log(输出,'\n');//------------输出两个
这是因为您的字符串如下所示,如果其中一个手动进行连接:

let text =
"quoth that of all the kings of earth \nof men he was mildest and most beloved \nto his kin the kindest keenest for praise";
请注意,换行符直接“挨着”下面的单词,中间没有空格。因此,当您在strong上调用
split(“”
)时,您将在数组中以例如
“\nof”
作为条目结束

这很重要,因为您的两种方法实际上做的事情并不相同。第一种方法添加对每个“单词”调用
.trim()
的结果,而第二种方法只添加未更改的“单词”,前提是它不缩减为空字符串
“\nof”
不执行后者,因此您可以在输出字符串中看到它。而在第一个代码示例中,您添加了
“\nof”.trim()
,即“中的


请注意,您可以使用
map
方法对数组的每个元素应用一个操作,例如这里的
.trim
,在过滤器之前或之后。

为什么不使用
字符串。替换
会更有效。最后,你只想用空格替换换行符

//示例文本
//请注意换行符
让文本=
“引用地球上所有国王的话\n”+
“他是人类中最温和、最受爱戴的人\n”+
“至亲至善,至善至善”;
//方法1
let filtered=text.replace(/\n/,'');

console.log(已筛选,'\n');//------------输出一
是否忘记为方法2附加代码。@bestinamir OP已经包含了方法二,只是代码段的结尾。
。filter
方法应该返回布尔值而不是字符串,即使是空的。它被视为true,并避免使用过滤器test@NikosM. 非常感谢。这就清楚了。请阅读问题的注释部分。这不是一个关于效率或“如何删除javascript中的换行符”的问题。首先,我同意
map
方法要简洁得多。我不知道!请查看我答案的更新。即使我将其连接为
word.trim()
,似乎仍然存在一个问题,因为换行符似乎仍然没有被删除。我没有说你应该使用
map
而不是
filter
map
只对列表中的每个元素应用一个函数,不能“跳过”任何元素。沿着这些思路,“正确”的解决方案是
text.split(“”).map(word=>word.trim()).filter(word=>word!==“”).join(“”
)(尽管这个特定文本实际上不需要
filter
),感谢您花时间跟进。这是有道理的——我在想
map
filter
似乎非常相似。