Я знаю, что на этот вопрос уже есть ответ, но я хотел предложить альтернативное решение, которое может оказаться полезным, и я объясню почему.
Ответ:
Вместо использования типичного 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)));