如何将对象中的字符串值转换为数字和布尔值?
How to convert string values into numbers and booleans from an object?
例如,如果我有一个 JavaScript 对象,
{
id: "234",
name: "shreyas",
active: "true"
}
如何转换成这样
{
id: 234,
name: "shreyas",
active: true
}
基本上从数字和布尔值中删除 ""
(双引号)。
我设法删除了布尔值
let query = JSON.stringify(req.query);
query.replace(/"true"/g, `true`).replace(/"false"/g, `false`);
query = JSON.parse(query)
我怎样才能用数字做同样的事情?
到目前为止我尝试了什么:
const nums = query.match(/"\d+"/g);
nums?.forEach((num) => {
const newNum = parseInt(num)
query.replace(`${num}`, `'${newNum}'`);
});
我的 process.env
也遇到了同样的问题。所以我创建了 parser
类型的函数 clear parsed output
- 我们需要预先声明数组中的假值和真值
- 然后return循环内的值取决于匹配的数组条件
isNaN(Number(str))
只接受纯数字。允许这样 "292"
而不是 a233
- 此外,您可以从字符串创建数组
one,two,three
=> ["one","two","three"]
const obj = { id: "234", name: "shreyas", active: "true",arr:"one,two,three" }
const clean = (value = '') => {
let FALSY_VALUES = ['', 'null', 'false', 'undefined'];
let TRUE_VALUES = ["true"];
if (!value || FALSY_VALUES.includes(value)) {
return false;
}else if (!value || TRUE_VALUES.includes(value)) {
return true;
} else if (!isNaN(Number(value))) {
return Number(value);
} else if (value.match(',')) {
return value.split(',').map((a) => a.trim());
}
return value;
};
const parser = (a)=> {
let env = {};
for (const k in a) {
env[k] = clean(a[k]);
}
return env;
};
console.log(parser(obj))
我的代码并不完美,但我希望它能有所帮助
let blah = {
id: "234",
age: "44",
name: "shreyas",
active: "true",
isActive: "false"
};
console.log(converting(blah));
function converting(obj) {
let keys = Object.keys(obj);
for (let key of keys) {
// convert to int
if (parseInt(obj[key])) {
obj[key] = parseInt(obj[key]);
}
// convert to boolean
if (String(obj[key]).toLocaleLowerCase() === 'true' ||
String(obj[key]).toLocaleLowerCase() === 'false') {
obj[key] = String(obj[key]).toLocaleLowerCase() === 'true';
}
}
return obj;
}
例如,如果我有一个 JavaScript 对象,
{
id: "234",
name: "shreyas",
active: "true"
}
如何转换成这样
{
id: 234,
name: "shreyas",
active: true
}
基本上从数字和布尔值中删除 ""
(双引号)。
我设法删除了布尔值
let query = JSON.stringify(req.query);
query.replace(/"true"/g, `true`).replace(/"false"/g, `false`);
query = JSON.parse(query)
我怎样才能用数字做同样的事情?
到目前为止我尝试了什么:
const nums = query.match(/"\d+"/g);
nums?.forEach((num) => {
const newNum = parseInt(num)
query.replace(`${num}`, `'${newNum}'`);
});
我的 process.env
也遇到了同样的问题。所以我创建了 parser
类型的函数 clear parsed output
- 我们需要预先声明数组中的假值和真值
- 然后return循环内的值取决于匹配的数组条件
isNaN(Number(str))
只接受纯数字。允许这样"292"
而不是a233
- 此外,您可以从字符串创建数组
one,two,three
=>["one","two","three"]
const obj = { id: "234", name: "shreyas", active: "true",arr:"one,two,three" }
const clean = (value = '') => {
let FALSY_VALUES = ['', 'null', 'false', 'undefined'];
let TRUE_VALUES = ["true"];
if (!value || FALSY_VALUES.includes(value)) {
return false;
}else if (!value || TRUE_VALUES.includes(value)) {
return true;
} else if (!isNaN(Number(value))) {
return Number(value);
} else if (value.match(',')) {
return value.split(',').map((a) => a.trim());
}
return value;
};
const parser = (a)=> {
let env = {};
for (const k in a) {
env[k] = clean(a[k]);
}
return env;
};
console.log(parser(obj))
我的代码并不完美,但我希望它能有所帮助
let blah = {
id: "234",
age: "44",
name: "shreyas",
active: "true",
isActive: "false"
};
console.log(converting(blah));
function converting(obj) {
let keys = Object.keys(obj);
for (let key of keys) {
// convert to int
if (parseInt(obj[key])) {
obj[key] = parseInt(obj[key]);
}
// convert to boolean
if (String(obj[key]).toLocaleLowerCase() === 'true' ||
String(obj[key]).toLocaleLowerCase() === 'false') {
obj[key] = String(obj[key]).toLocaleLowerCase() === 'true';
}
}
return obj;
}