【问题标题】:Node.js - Using template literals outside of stringsNode.js - 在字符串之外使用模板文字
【发布时间】:2019-07-13 09:13:30
【问题描述】:

我正在逐行读取文件并将每一行分配给一个键控数组。我的文件的每一行都以它们的键开头(例如 name=,text=)。 我想将每一行分配给一个数组,而不必手动输入每个键。

示例:

rd.on('line', function(line) {
   line = line.split('=');
   let key = line[0];
   line.shift();
   line = line.join(' ');
   array.name = line;
   // ... Next loop
   line = line.split('=');
   let key = line[0];
   line.shift();
   line = line.join(' ');
   array.text = line;
});

这不是我想要的

据我所知,模板文字只能在 `'d 字符串 (console.log(${key})) 中使用,但我希望有一些我无法通过搜索找到的解决方法。

我想工作的代码在这里:

rd.on('line', function(line) {
   line = line.split('=');
   let key = line[0];
   line.shift();
   line = line.join(' ');
   array.${key} = line;
});

我知道array.${key} 是无效语法,我希望这里的人对我将如何实现我想要的有所了解。

提前致谢!

【问题讨论】:

  • 你不能使用 array[key] 吗?像字典一样?
  • 一个“键控数组”听起来很像“一个以键为属性名称的对象,其值为数组”,又名{ name: [], text: [] } 研究括号访问器与点访问器
  • 这是一个很好的观点,Sanka,我不知道为什么在我一直在寻找解决方案的最后一个小时里没有想到这一点。这非常适合将每一行分配给一个键
  • 如果有多个= 符号,则.join(' ') 将用空格替换其余的符号。这真的是你想要的吗?
  • 不,这不是 Ry,我在我的待办事项列表中将其作为修复,因为它不是优先事项

标签: javascript node.js template-literals


【解决方案1】:

使用array[key],其中array is actually a dictionary

【讨论】:

    【解决方案2】:

    如果我正确理解了这个问题,您想使用对象而不是数组来存储基于特定键的行。

    // initiate the Object
    let lines = {};
    
    rd.on('line', function(line) {
       line = line.split('=');
       let key = line[0];
       line.shift();
       line = line.join(' ');
    
       lines[key] = line;
    });
    

    您可以在此处阅读有关对象基础知识的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects

    【讨论】:

      【解决方案3】:

      这样可以吗?

      const data = {}; // I found name `array` confusing
      rd.on('line', function(line) {
         const [key, ...rest] = line.split('=');
         data[key] = rest.join(' ');
      });
      

      但有一件事,您与 = 分开,但与 (空格字符)加入,但也许这是故意的。

      【讨论】:

      • 是的,拆分是删除 = 因为我不想要它
      • @Sevrene,但如果您在文件中的值是 text=some text=some other text,那么在数据中它将是:{ text: "some text some other text" }。拆分正在删除行中的所有 = 字符。
      • 是的,我的待办事项列表中有这个问题要解决。这不是一个优先级错误。今晚晚些时候很可能会解决这个问题
      • .join('=') 应该可以解决问题。在这方面splitjoin 是可逆的。
      • 嗯。是的,我想你是对的,我一直停留在 split(' ') 的心态中,并一直认为如果不是这种情况,它会用 equals 填充我的空间
      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 2023-02-08
      • 2015-10-08
      • 2021-04-01
      • 2016-06-08
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多