JavaScript中的联接函数,对于元素数量未知的数组,未在结尾显示分隔符

时间:2018-10-24 15:04:10

标签: javascript arrays join separator

我是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()

4 个答案:

答案 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();