如何将对象中的字符串值转换为数字和布尔值?

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

  1. 我们需要预先声明数组中的假值和真值
  2. 然后return循环内的值取决于匹配的数组条件
  3. isNaN(Number(str)) 只接受纯数字。允许这样 "292" 而不是 a233
  4. 此外,您可以从字符串创建数组 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;
}