首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript对象在node.js中神秘地运行,但在jsbin中工作良好。

Javascript对象在node.js中神秘地运行,但在jsbin中工作良好。
EN

Stack Overflow用户
提问于 2019-01-26 22:26:23
回答 1查看 77关注 0票数 0

在node.js javascript中,我有一个神秘的外观问题。我正在记录row对象,它看起来像{ 'email':'15',surveyLink:'hghgh',名字:'LOO‘}在node.js中。你可以看到电子邮件周围有引号。我处理这把钥匙有问题。我在jsbin中尝试了相同的代码,它运行得很好,但是它在node.js javascript中造成了问题。https://jsbin.com/curirikoxo/edit?html,console,output我试图以这样的方式对html进行更改,即对于{{+key+}}的每一次发生,我都希望将其更改为该键的对象值。它在jsbin中运行良好,但是当我在node.js javascript中运行相同的代码时,{email} in html不会被它的值所取代。你能告诉我原因是什么吗?

我尝试过像JSON.stringify(),对象,然后再一次,JSON.parse(),对象,但是在结果中没有发生任何效果。我觉得键email可能在它周围引用了像这样的'email',而在html.replace(new RegExp(match, 'g'), row[key])中使用密钥可能会导致问题,所以我检查了key.indexOf('\''),但是日志给了-1。我尝试了许多其他的事情,我已经疯了,并且对这个愚蠢的问题感到沮丧。

代码语言:javascript
复制
  function replaceVariablesWithDataInTemplate(html,row){
  let keys=Object.keys(row);
  console.log(JSON.parse(JSON.stringify(row)));
  for (var key of keys){
  let match="{{"+key+"}}";
 console.log(html.indexOf(key));
      console.log(Object.keys(row).forEach(key => { console.log(key, '-', 
      key.charAt(0), ':', key.charCodeAt(0)); })); //update-3
  html=html.replace(new RegExp(match, 'g'), row[key]);
  }

您能告诉我为什么在node.js javascript中会发生这种情况,但是在jsbin中运行得很好吗?另外,你能给我一些克服它的方法吗?

更新1:这个行对象是从消防局收到的。我找不到一个原因,为什么只有电子邮件键有引号在它的第一行对象。此外,我想分享所有的行,在消防局正在写从csv文件存储在防火墙存储,并被解析使用papaparse模块。这封电子邮件是csv的第一列,以前name是csv的第一列,当时名称键导致了问题。当我通过删除email键并以相同的值再次将其写回从防火墙控制台更新文档时,我的函数给出了正确的结果,在这两种情况下,email键在防火墙中的外观都是相同的,即在email字段中没有在防火墙控制台中显示引号。

Update-2: -我正在添加一个屏幕截图,显示日志在删除和读取云中具有相同值的email键之前和之后的样子。

更新-3:

代码语言:javascript
复制
email -  : 65279
surveyLink - s : 115
name - n : 110
undefined
email -  : 65279
surveyLink - s : 115
name - n : 110
undefined
email -  : 65279
surveyLink - s : 115
name - n : 110
undefined
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 23:17:15

在您的例子中,似乎问题在于格式错误的数据源,CSV文件。因此,在您的数据库中,email键以BOM字符开始。

最简单的解决方法是在从数据库中获取对象之后“清理”对象。

例如,您可以使用函数:

代码语言:javascript
复制
function cleanUp(obj) {
  const keys = Object.keys(obj);
  return keys.reduce((acc, key) => {
    const value = obj[key];
    const cleanKey = key.charCodeAt(0) === 0xFEFF ? key.substr(1) : key;
    acc[cleanKey] = value;
    return acc;
  }, {});
}

你可以像这样使用它:

代码语言:javascript
复制
function replaceVariablesWithDataInTemplate(html,obj) {
  const row = cleanUp(obj);
  let keys=Object.keys(row);
  console.log(JSON.parse(JSON.stringify(row)));

  for (var key of keys) {
    let match="{{"+key+"}}";
    console.log(html.indexOf(key));
    html = html.replace(new RegExp(match, 'g'), row[key]);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54383382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档