【问题标题】:if statement on template literal value关于模板文字值的 if 语句
【发布时间】:2019-11-20 22:06:41
【问题描述】:

我正在尝试执行以下操作但无济于事:在某些情况下,self.name 在值的中间有一个错误的“/”; 即。像这样填充 'WSDH/222-310' - 我试图简单地捕获它并将其转换为值以在我的以下.load 调用中解析为'WSDH-222-310'

  if (self.type === "car") {
       var carClean = ${self.name}; // returns syntax error
       var res = str.replace("/", "-");
       console.log(carClean )
       console.log(res)
      //  console.log({self.type});
  }

  self.$container.load(`view/coolObjects/${self.type}/${self.name}`, loadProfile);

【问题讨论】:

  • 您正在清理这些值并将它们存储在新变量中。什么不工作?即,当您随后在 URL 中将它们引用为self.name(原始值)时,您的值当然不是“干净的”。
  • this.${self.name} 应该做什么?它不在反引号中。 str 是什么? atmClean 是什么?您根本没有使用最后一个石灰中创建的变量。
  • 什么是this,是self
  • 请先修复你的sn-p。您正在产生一个语法错误(这应该很明显)并且.replace 没有像您预期的那样在carClean 上运行。

标签: javascript ecmascript-6


【解决方案1】:

如果所有嵌入的变量都应该被转义,我认为有一个标记模板的用例。

模板字面量的更高级形式是标记模板。标签允许您使用函数解析模板文字。标记函数的第一个参数包含一个字符串值数组。其余参数与表达式有关。最后,您的函数可以返回您操纵的字符串

例子:

var path = `foo/${x}/${y}/bar`;

如果xy 都应该被转义,以便用'-' 替换'/',那么你可以这样做:

const sanitize_path = (strings, ...parts) =>
  strings
    .flatMap((str, idx) =>
      [ str,
        idx < parts.length
          ? parts[idx].replace(/\//g, '-')
          : '' ])
    .join('');

const x = '1/2/3';
const y = 'y';

console.log(

  sanitize_path`foo/${x}/${y}/bar`
  
);

【讨论】:

    【解决方案2】:

    为什么要在使用字符串之前清理它们?

    我不清楚你到底想做什么,但你可以像这样即时“清理”:

    self.$container.load(`view/coolObjects/${self.type}/${self.name.replace("/","-")}`, loadProfile);
    

    您周围的代码是否有效,我无法判断。但这是我建议的工作示例:

    let self = {"type":"mytype","name":"myname"};
    console.log(`view/coolObjects/${self.type}/${self.name.replace("my","your")}`);

    【讨论】:

    • 那是因为 self.name 在您尝试进行替换的任何情况下都未定义。您可以为此添加检查。或者确保它已填充。但是,如果它未定义,则表明您的数据存在其他问题,无论如何您最终都会偶然发现这些问题。
    【解决方案3】:

    如果我正确理解了您的问题,那么您使用String.prototype.replace 就在正确的轨道上 - 应该是这样的简单:

    var self = {
      name: 'WSDH/222-310'
    };
    
    self.name = self.name.replace('/', '-');
    
    console.dir(self);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 2020-03-07
      • 1970-01-01
      • 2017-11-13
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多