【问题标题】:How to convert object properties string to integer in javascript如何在javascript中将对象属性字符串转换为整数
【发布时间】:2020-07-18 07:34:54
【问题描述】:

我想知道如何在 javascript 中将对象属性字符串转换为整数。 我有一个obj,如果有属性值是数字字符串转换为javascript中的数字

var obj={
  ob1: {id: "21", width:"100",height:"100", name: "image1"},
  ob2: {id: "22", width:"300",height:"200", name: "image2"}
}


function convertIntObj (obj){
    Object.keys(obj).map(function(k) { 
            if(parseInt(obj[k])===NaN){
              return obj[k] 
            }
            else{
              return parseInt(obj[k]);
            }
        });
}

var result = convertIntObj(obj);

console.log(result)

预期输出:

[
  {id: 21, width:100,height:100, name: "image1"},
  {id: 22, width:300,height:200, name: "image2"}
]

【问题讨论】:

  • 你在convertIntObj中没有return,所以函数调用的值隐式为undefined
  • ... 和 NaN 不等于任何东西,甚至不等于它自己。另外,您需要单独映射obj 的属性,目前您正在解析obj 中的对象,而不是它们的属性。

标签: javascript arrays object javascript-objects


【解决方案1】:

这应该可以完成工作:

var obj = {
  ob1: {
    id: "21",
    width: "100",
    height: "100",
    name: "image1"
  },
  ob2: {
    id: "22",
    width: "300",
    height: "200",
    name: "image2"
  }
}


function convertIntObj(obj) {
  const res = {}
  for (const key in obj) {
    res[key] = {};
    for (const prop in obj[key]) {
      const parsed = parseInt(obj[key][prop], 10);
      res[key][prop] = isNaN(parsed) ? obj[key][prop] : parsed;
    }
  }
  return res;
}

var result = convertIntObj(obj);

console.log('Object result', result)

var arrayResult = Object.values(result);

console.log('Array result', arrayResult)

点击“运行代码sn-p”查看结果

【讨论】:

  • 感谢您的帮助,但预期的输出是数组
  • Object.values(result) 是你想要的数组。我在 sn-p 中又添加了 2 行
【解决方案2】:

迭代 Object.keys() 两次。如果键对应的值是数字,则解析值,否则设置之前存在的默认值

var obj = {
  ob1: { id: "21", width: "100", height: "100", name: "image1" },
  ob2: { id: "22", width: "300", height: "200", name: "image2" }
};

var res = {};

Object.keys(obj).forEach(key => {
  res[key] = {};
  Object.keys(obj[key]).forEach(temp => {
    res[key][temp] = !isNaN(obj[key][temp])
      ? parseInt(obj[key][temp], 10)
      : obj[key][temp];
  });
  return res;
});

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案3】:

    您可以使用Object.entries().reduce() 方法迭代数据中的键值对,并使用NumberNumber.isNaN() 方法适当地转换值。

    const data = {
      ob1: {id: "21", width:"100",height:"100", name: "image1"},
      ob2: {id: "22", width:"300",height:"200", name: "image2"}
    };
    
    const result = Object.entries(data).reduce((r, [k, o]) => {
        r[k] = Object.entries(o).reduce((r, [k, v]) => {
            let _v = Number(v);
            if(!Number.isNaN(_v)) { v = _v; }
            return (r[k] = v, r);
        }, {});
        return r;
    }, {});
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案4】:

      您好,我建议您使用 JSON.stringify() 方法。它用于将对象转换为通过 Web 服务器发送数据所需的字符串。它将对象中的变量集转换为 JSON 字符串:

      var objToStr = {
        siteName: "W3Docs",
        bookName: "Javascript",
        booksCount: 5
      };
      var myJSON = JSON.stringify(objToStr);
      console.log(myJSON);

      此外,您可以使用 toString() 方法。当需要将对象转换为字符串时也会调用它:

      var obj = {
        siteName: "W3Docs",
        bookName: "Javascript",
        booksCount: 5
      };
      function objToString(object) {
        var str = '';
        for (var k in object) {
          if (object.hasOwnProperty(k)) {
            str += k + '::' + object[k] + '\n';

      此信息取自source

      【讨论】:

      • 这不能回答 OP 的问题。除非我弄错了,否则它的作用与 OP 想要的完全相反(这很有趣,但不是特别有用)......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 2016-08-30
      • 2011-10-05
      • 1970-01-01
      • 2021-08-21
      • 2020-12-30
      • 1970-01-01
      相关资源
      最近更新 更多