在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。我尝试了许多其他的事情,我已经疯了,并且对这个愚蠢的问题感到沮丧。
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:
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发布于 2019-01-26 23:17:15
在您的例子中,似乎问题在于格式错误的数据源,CSV文件。因此,在您的数据库中,email键以BOM字符开始。
最简单的解决方法是在从数据库中获取对象之后“清理”对象。
例如,您可以使用函数:
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;
}, {});
}你可以像这样使用它:
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]);
}
}https://stackoverflow.com/questions/54383382
复制相似问题