Как преобразовать строковое значение в объекте в число? - PullRequest
1 голос
/ 18 июня 2019

У меня есть объект, в котором числовые значения для 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 ]

2 голосов
/ 18 июня 2019

на месте

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

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

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

console.log(users);
1 голос
/ 18 июня 2019

Используйте простой 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; }
0 голосов
/ 18 июня 2019

Я знаю, что на этот вопрос уже есть ответ, но я хотел предложить альтернативное решение, которое может оказаться полезным, и я объясню почему.

Ответ:

Вместо использования типичного transform в массиве users, вы можете применить Proxy к каждому объекту и использовать обработчик get, чтобы проверить, может ли значение свойства быть приведено кnumber с помощью оператора + .Это делается с использованием короткого замыкания оценка , которое возвращает первое истинное выражение.Если значение свойства не может быть преобразовано в number, оно вернет исходное значение без принуждения (в данном случае string).

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

Почему это полезно?

Код всегда будет зависеть от вашего варианта использования.В своем вопросе вы спросили, как преобразовать user_id в number в вашем users объекте.Если это разовая ситуация, когда вам нужно, чтобы это конкретное свойство было приведено только к числовому значению, применение прокси к вашим объектам не рекомендуется.

однако

Если вы оказались в ситуации, когда у вас есть несколько значений свойств, которые вы хотели бы преобразовать в number типы, если это возможно, вы можете рассмотреть возможность использования вышеупомянутой техники, чтобы вам не приходилось точно определять и обновлять каждое из них.Имя свойства в отдельной функции преобразования.

Примечание: Поскольку мы используем метод map для связывания наших исходных объектов с помощью обработчика Proxy, вам потребуется использовать другой декларативный (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]}));

Пример кода:

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

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

users.forEach(({user_id, name}) => (console.log("user id: " + user_id + " is type: " + typeof user_id), console.log("name: " + name + " is type: " + typeof name)));
0 голосов
/ 18 июня 2019

Может быть как: -

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


users = users.map(a =>  {
  a.user_id = +a.user_id;
  return a;
});
console.log(users);
0 голосов
/ 18 июня 2019
return users.map(user => ({...user, user_id: +user.user_id}))
...