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

时间:2019-06-17 21:26:17

标签: javascript arrays string object numbers

我有一个对象,其中user_id的数字值是字符串,但是我想更改这些值以数字形式返回,我该怎么做?

const users =
[
 { user_id: '1', name: 'Jack'},
 { user_id: '2', name: 'Emma'},
 { user_id: '3', name: 'David'}
]

// I want the output to look like this

const users =
[
 { user_id: 1, name: 'Jack'},
 { user_id: 2, name: 'Emma'},
 { user_id: 3, name: 'David'}
]

5 个答案:

答案 0 :(得分:2)

就地

HAVING COUNT(sales.Product_id)>1

users.forEach(u=>u.user_id*=1)

答案 1 :(得分:1)

使用简单的map,然后使用一元+运算符将其转换为数字。

const users = [{
    user_id: '1',
    name: 'Jack'
  },
  {
    user_id: '2',
    name: 'Emma'
  },
  {
    user_id: '3',
    name: 'David'
  }
];

const res = users.map(({ name, user_id }) => ({ name, user_id: +user_id }));
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

ES5语法:

var users = [{
    user_id: '1',
    name: 'Jack'
  },
  {
    user_id: '2',
    name: 'Emma'
  },
  {
    user_id: '3',
    name: 'David'
  }
];

var res = users.map(function(user) { 
  return { name: user.name, user_id: +user.user_id };
});
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 2 :(得分:0)

return users.map(user => ({...user, user_id: +user.user_id}))

答案 3 :(得分:0)

可能像:-

  map.on('click', function (e) {
      var MapNote = L.popup();
      var content = '<form method="post"> {% csrf_token %} {{form}} <br> <button type="submit"> Save</button>'
      MapNote.setContent(content);
      MapNote.setLatLng(e.latlng); //calculated based on the e.layertype
      MapNote.openOn(map);
      })

答案 4 :(得分:0)

我知道这个问题已经有了答案,但是我想提供一种可能对您有益的替代解决方案,我将解释原因。

答案:

您可以将transform应用于每个对象,并利用users处理程序来测试属性值是否为Proxy数组上的典型get能够被强制to a number by using the + operator。这是使用short-circuit evaluation完成的,它返回第一个真表达式。如果属性的值不能转换为number,它将返回没有强制值的原始值(在这种情况下为string)。

users = users.map(_ => 
  new Proxy(_, {get: (target, property) => +target[property] || target[property]}))

这为什么有用?

代码将始终取决于您的用例。在您的问题中,您询问如何在user_id对象中将number转换为users。如果是一次性情况,您只需要将此特定属性强制为数字值,则不建议将代理应用于对象。

但是

如果您发现自己有许多可能要转换为number类型的属性值的情况,则可以考虑使用上述技术,从而不必查明和在单独的转换函数中更新每个属性名称。

注意::由于我们使用map方法将原始对象与Proxy处理程序捆绑在一起,因此您要么需要使用其他声明式({{1 }}或var),或在原始let声明中使用Array.from

users

代码示例:

const users = Array.from(
[
 { user_id: '1', name: 'Jack'},
 { user_id: '2', name: 'Emma'},
 { user_id: '3', name: 'David'}
], _ => new Proxy(_, {get: (target, property) => +target[property] || target[property]}));