gpt4 book ai didi

Javascript 对象在 Node.js 中行为神秘,但在 jsbin 中工作正常

转载 作者:行者123 更新时间:2023-12-03 00:19:28 24 4
gpt4 key购买 nike

我在 node.js javascript 中遇到了一个神秘的问题。我正在记录 Node.js 中的 row 对象,该对象类似于 { 'email': '15', SurveyLink: 'hghgh', name: 'LOO' } 。您可以看到该电子邮件周围有引号。我在处理这把 key 时遇到问题。我在 jsbin 中尝试了相同的代码,它工作正常,但它导致了 node.js javascript 中的问题。 https://jsbin.com/curirikoxo/edit?html,console,output我试图以这样的方式对 html 进行更改,即对于 {{+key+}} 的每次出现,我都想将其更改为该键的对象值。它在 jsbin 中工作正常,但是当我在 node.js javascript 中运行相同的代码时,html 中的 {{email}} 不会被其值替换。你能告诉我这可能是什么原因吗?

我尝试过诸如 JSON.stringify() 对象,然后再次尝试 JSON.parse() 对象,但结果没有发生任何影响。我觉得在 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:正在从 firestore 接收此行对象。我找不到为什么只有电子邮件键在行对象中带有引号的原因。另外,我想分享 firestore 中的所有行都是从存储在 firebase 存储上的 csv 文件写入的,并使用 papaparse 模块进行解析。此电子邮件是 csv 的第一列,之前 name 是 csv 中的第一列,当时 name 键导致了问题。当我通过删除 email 键从 firestore 控制台更新文档并使用相同的值再次写回时,我的函数给出了正确的结果,并且在这两种情况下 email 键的外观firestore 是相同的,即 firestore 控制台中的 email 字段上不显示引号。

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

enter image description here

更新 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

最佳答案

问题似乎出在格式错误的数据源上,在您的情况下是 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]);
}
}

关于Javascript 对象在 Node.js 中行为神秘,但在 jsbin 中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com