字符串串联始终以未定义

时间:2019-05-23 07:29:16

标签: javascript angular

每当我添加或删除数组中的元素时,我需要通过为每个项目放置-来将数组中的元素转换为字符串。这是我的实现方式:

onSelect(event: MatOptionSelectionChange, service: string) {
    let serviceList: string;
    if(event.source.selected) {
      this.servicesToToggle.push(service);
    } else {
      this.servicesToToggle = this.servicesToToggle.filter(item => item !== service);
    }

    this.servicesToToggle.forEach(element => {
      if(element === undefined) {
        return;
      }
      serviceList += '-' + element;
    });
    console.log(serviceList);
  }

问题是undefined被包含在每个字符串的开头。像这样:

undefined-Hardware Service 
undefined-Hardware Service-RFID Service
undefined-Hardware Service 
undefined-Hardware Service-RFID Service
undefined-Hardware Service-RFID Service-QR Service 
undefined-Hardware Service-RFID Service 
undefined-RFID Service undefined

您能帮我吗?

1 个答案:

答案 0 :(得分:5)

发生这种情况是因为您没有初始化library(tidyverse) library(gridExtra) l <- split(mtcars, mtcars$cyl) # divide based on cyl in a list plots <- lapply(l, function(x) { ggplot(x, aes(x=mpg, y=hp)) + geom_point(color = "blue") + facet_wrap(.~carb) }) # call lapply() on each element do.call(grid.arrange, plots) 变量。

已声明但未初始化的变量具有serviceList值。

undefined

如果在var x; console.log(x); // undefined和字符串之间使用+运算符,则undefined将被强制为字符串undefined

"undefined"

要解决此问题,请将var x; console.log(x + 'foo'); // undefinedfoo初始化为空字符串:

serviceList

我也回答了您的评论问题。

有很多方法可以连接字符串列表,我最喜欢的是使用let serviceList: string = '';

.join

在您的情况下,它将是:

var concatenated = ['list', 'of', 'elements'].join(' - ');
console.log(concatenated);

如果您愿意的话,另一种解决方案是检查索引,如果serviceList = this.servicesToToggle.join('-'); ,我们不放-

index === 0