我是JavaScript新手,在使用join函数时遇到了一些问题。我有一个元素数量未知的数组,我想使用join在每两个元素之间使用分隔符打印它。我想要得到这样的东西:a/b/c/d
,以'/'作为分隔符。问题在于,最后我得到了最后一个分隔符,例如:a/b/c/d/
。我该如何摆脱呢?
这是我的代码:
var makePath;
function makePath(separator) {
let comp = []
return function(element) {
comp.push(element)
return comp.join(separator)
}
}
var main = function() {
var p1 = makePath("/");
p1("One");
p1("Two");
p1("Three");
window.console.log("p1:" + p1());
}
main()
答案 0 :(得分:3)
在您的console.log
语句中,您正在使用空参数调用p1()
。这就是在字符串中添加尾随定界符的原因。您可能希望存储最终调用的结果,并使用它。
var makePath;
function makePath(separator)
{
let comp = []
return function(element)
{
comp.push(element)
return comp.join(separator)
}
}
var main = function()
{
var p1 = makePath("/");
p1("One");
p1("Two");
var x = p1("Three");//store the result of p1('three')
window.console.log("p1:" + x );//print it out
}
main();
答案 1 :(得分:1)
之所以会这样,是因为当您不带任何参数调用p1()
时,您实际上是在执行p1(undefined)
。因此,您的数组如下所示:["One", "Two", "Three", undefined]
并以One/Two/Three/
的身份加入
演示:
var makePath;
function makePath(separator) {
let comp = []
return function(element) {
console.log(`pushing "${element}" to array`)
comp.push(element)
return comp.join(separator)
}
}
var main = function() {
var p1 = makePath("/");
p1("One");
p1("Two");
p1("Three");
window.console.log("p1:" + p1());
}
main()
解决方案:如果未传递任何参数,请不要将其推入数组:
var makePath;
function makePath(separator) {
let comp = []
return function(element) {
if(element) comp.push(element)
return comp.join(separator)
}
}
var main = function() {
var p1 = makePath("/");
p1("One");
p1("Two");
p1("Three");
window.console.log("p1:" + p1());
}
main()
答案 2 :(得分:0)
为什么不仅检查undefined
参数?这样,仅在需要构建字符串时才执行函数join
。
function makePath(separator) {
let comp = []
return function(element) {
if (element) comp.push(element);
return comp.join(separator);
}
}
var main = function() {
let pathify = makePath("/");
pathify("One");
pathify("Two");
pathify("Three");
window.console.log("Path:", pathify());
}
main()
答案 3 :(得分:-1)
只需添加.replace
,它将使用此正则表达式/
删除最后一个/\/$/
var makePath;
function makePath(separator)
{
let comp = []
return function(element)
{
comp.push(element)
return comp.join(separator).replace(/\/$/,"")
}
}
var main = function()
{
var p1 = makePath("/");
p1("One");
p1("Two");
p1("Three");
window.console.log("p1:" + p1() );
}
main();