为何我的对象数组过滤箭头函数无法正常工作?
箭头函数过滤对象数组无法匹配的问题
我用于过滤对象数组的箭头函数无法正常工作,需求是将一个对象的两个键值组合后,与另一个对象的某个键值进行匹配,以下是简化后的代码片段:
const fNFS_S = [{"Seq":0,"KeyReg":"020620222022000258","TaxId":"06.865.436/0001-20","KeyId":"86520","NfDate":"02/06/2022","RegDate":"02/07/2022","NfNum":"20220002","NfMod":"2022","NfVal":"200,00","IRRF":"0,00","RetISS":"0,00","RetPIS":"0,00","RetCOF":"0,00","RetCSLL":"0,00","NumFat":"2022000258","PgFat":"1"}]; const fData = [{"docnum":"2022000258","vendor":"4.1.1.01.0003","docdate":"02/06/2022","expirydate":"02/07/2022","paymentcondition":"","category":"1.1.2.04.0001","itemdescrip":"CV:Valor ref.a servicos de mao de obra de industrializ. de moveis cfe nf nº 2022000258","itemvalue":"200,00","message":""}]; var cnpjcheck = fData[0]['docdate'].replaceAll('/','') + fData[0]['docnum']; var keyregcheck = fNFS_S[0]['KeyReg']; var dupl = fNFS_S.filter(o => o.KeyReg === cnpjcheck); //此处始终无法匹配
我甚至尝试调试它们的代码单元,看起来二者确实完全相同:
console.log(cnpjcheck === keyregcheck); for (var i = 0; i < cnpjcheck.length; i++) { console.log(cnpjcheck.codePointAt(i), keyregcheck.codePointAt(i)); }
这段代码在本地可以正常工作,但在Google AppScript代码片段中却无法运行。从调试器中可以看到,待匹配的组合字符串与KeyReg值,其中组合字符串的引号换行了。我尝试过使用trim()和normalize()方法处理,但没有任何效果,最终匹配失败。
解决方法
根据Google AppScript环境的特性,核心问题大概率是字符串中混入了不可见的换行或特殊空白字符,trim()仅能去除首尾普通空白,无法处理中间的特殊字符。可以尝试以下方案:
- 只保留数字字符:因为匹配内容都是数字,直接过滤掉所有非数字内容,确保字符串纯净:
var cnpjcheck = (fData[0]['docdate'].replaceAll('/','') + fData[0]['docnum']).replace(/\D/g, ''); var dupl = fNFS_S.filter(o => o.KeyReg.replace(/\D/g, '') === cnpjcheck);
- 清除所有空白类字符:如果存在其他空白干扰,用正则移除所有空白、换行符:
var cnpjcheck = (fData[0]['docdate'].replaceAll('/','') + fData[0]['docnum']).replace(/\s/g, ''); var dupl = fNFS_S.filter(o => o.KeyReg.replace(/\s/g, '') === cnpjcheck);
- 手动过滤可见数字:如果以上方法无效,遍历字符串只保留数字字符:
function cleanString(str) { return str.split('').filter(char => /[0-9]/.test(char)).join(''); } var cnpjcheck = cleanString(fData[0]['docdate'].replaceAll('/','') + fData[0]['docnum']); var dupl = fNFS_S.filter(o => cleanString(o.KeyReg) === cnpjcheck);
这些方法能确保两个字符串只保留需要匹配的核心内容,避开环境引入的特殊字符干扰。
内容的提问来源于stack exchange,提问作者augustus182l
相关产品推荐
相关产品推荐

