javascript - 我需要返回 null 作为名为 null 的键的值,但它一直返回未定义
问题描述
我有一个 parseJSON 函数,其结果应该与传递相同输入时调用 JSON.parse 的结果完全匹配。我有一个名为 getParsed() 的辅助函数,它将字符串解析为正确的类型。我的问题:
parseJSON('{"boolean, true": true, "boolean, false": false, "null": null }')
// 返回{boolean, true: true, boolean, false: false, null: undefined}
我需要最后一个属性返回
null: null
为了匹配 JSON.parse() 的结果
我确定我在这里缺少关于 null 的性质的一些东西,但我找不到解决问题的方法。下面的代码片段(截至目前,该函数仅处理对象文字)。
var getParsed = str => {
// Check if string is a number. Checks for floating point and integer
if (/^-?\d*\.?\d+$/.test(str)) {
if (str.includes('.')) {
return parseFloat(str);
} else {
return parseInt(str);
}
}
// Check if string is surrounded by quotes, wwill remain a string.
if (/"[^"]*()[^"]*"/.test(str)) {
var arr = str.split('');
arr.pop();
arr.shift();
return arr.join('');
}
// Check if string is boolean
if (str === 'true') { return true; }
if (str === 'false') { return false; }
// Check if string is false
if (str === 'null' || str === 'undefined') { return null; }
};
var parseJSON = function (json, invoked = false) {
if (json.startsWith('{')) {
var arr = json.split('');
var first = arr.shift();
var last = arr.pop();
var props = arr.join('').split(', ');
var res = {};
for (var i = 0; i < props.length; i++) {
if (!props[i].includes(':')) {
props[i] = props[i] + ', ' + props[i + 1];
props.splice(i + 1, 1);
}
}
for (var i = 0; i < props.length; i++) {
var prop = props[i].split(': ');
var key = prop[0];
var val = prop[1];
if (key.includes('"')) {
key = key.split('');
key.shift();
key.pop();
key = key.join('');
res[key] = getParsed(val);
}
}
return res;
};
解决方案
通过把这个:
console.log({str:str, test: (str === 'null')})
在第一行getParsed
,你会看到你的问题。
{str: 'null ', test: false}
所以你在那个函数中的最终测试失败了,然后因为它没有返回任何东西,你undefined
在你的最终对象中得到了一个值。
确保你去掉你的空间,它会起作用:)
推荐阅读
- react-native - 如何在反应原生应用程序中存储用户偏好?
- javascript - 跟踪淘汰赛js中输入值的变化
- appium-desktop - 使用 WinAppDriver 运行 wpf 应用程序的 UI 测试失败
- angular - 我们如何在 ANGULAR 6 中将 ckfinder 集成到 ckeditor 中?
- video - FFMPEG 覆盖两个视频并添加文本
- azure - 针对 Azure VM 上托管的应用程序的 Azure 网关发出警报
- .net - 无法使用 iText 将数据导入 pdf 复选框
- javascript - 如何将 2 个端点 express.js 组合成一个新端点
- jasperserver - jasper 中的计划报告失败(其他人正在工作)
- mysql - oracle数据库中如何插入特殊字符