我需要 return null 作为名为 null 的键的值,但它保持 returning 未定义
I need to return null as a value of key called null, but it keeps returning undefined
我有一个 parseJSON 函数,其结果应该与传递相同输入时调用 JSON.parse 的结果完全匹配。我有一个名为 getParsed() 的辅助函数,它将字符串解析为正确的类型。我的问题:
parseJSON('{"boolean, true": true, "boolean, false": false, "null": null }')
// returns {boolean, true: true, boolean, false: false, null: undefined}
我需要最后一个 属性 到 return 作为
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}
所以你在那个函数中的最终测试失败了,然后因为它没有 return 任何东西,你在你的最终对象中得到了一个 undefined
值。
确保去掉你的空格,它会起作用:)
我有一个 parseJSON 函数,其结果应该与传递相同输入时调用 JSON.parse 的结果完全匹配。我有一个名为 getParsed() 的辅助函数,它将字符串解析为正确的类型。我的问题:
parseJSON('{"boolean, true": true, "boolean, false": false, "null": null }')
// returns {boolean, true: true, boolean, false: false, null: undefined}
我需要最后一个 属性 到 return 作为
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}
所以你在那个函数中的最终测试失败了,然后因为它没有 return 任何东西,你在你的最终对象中得到了一个 undefined
值。
确保去掉你的空格,它会起作用:)