Преобразовать свойство объекта в число - PullRequest
0 голосов
/ 23 апреля 2020

Как я могу преобразовать все свойства объекта, которые являются целыми числами из строки, в фактический числовой тип.

Я хочу, чтобы:

  1. Lat / Long был типом с плавающей точкой
  2. Свойства даты были бы числами

Это фрагмент одного объекта в моем массиве объектов return:

Province/State: ""
Country/Region: "US"
Lat: "37.0902"
Long: "-95.7129"
1/22/20: "0"
1/23/20: "0"
1/24/20: "0"
1/25/20: "0"
1/26/20: "0"
1/27/20: "0"
1/28/20: "0"
1/29/20: "0"
1/30/20: "0"
1/31/20: "0"
2/1/20: "0"
2/2/20: "0"
2/3/20: "0"
2/4/20: "0"
2/5/20: "0"
2/6/20: "0"
2/7/20: "0"
2/8/20: "0"

Редактировать: Большое спасибо всем ответам! Мне нравится видеть разные методы решения. Я знаю, что снова столкнусь с этой проблемой, поэтому здорово знать, как обойти ее сейчас.

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

вы можете сделать что-то вроде:

const provinceData = {
  "Province/State": "",
  "Country/Region": "US",
  Lat: "37.0902",
  Long: "-95.7129",
  "1/22/20": "0",
  "1/23/20": "0",
  "1/24/20": "0",
  "1/25/20": "0",
  "1/26/20": "0",
  "1/27/20": "0",
  "1/28/20": "0",
  "1/29/20": "0",
  "1/30/20": "0",
  "1/31/20": "0",
  "2/1/20": "0",
  "2/2/20": "0",
  "2/3/20": "0",
  "2/4/20": "0",
  "2/5/20": "0",
  "2/6/20": "0",
  "2/7/20": "0",
  "2/8/20": "0",
};
let formatedProvinceData = {};

for (const property in provinceData) {
  const unusedObjectValues = ["Province/State", "Country/Region"];

  formatedProvinceData = unusedObjectValues.includes(property)
    ? { ...formatedProvinceData, [property]: provinceData[property] }
    : { ...formatedProvinceData, [property]: parseFloat(provinceData[property]) };
}

console.log(formatedProvinceData)
1 голос
/ 23 апреля 2020

Вы можете использовать 'for ... in' l oop для изменения каждого свойства. Я проверяю ваше свойство даты, используя метод .split(), который создает массив строки. Если результирующий массив (разделенный на /) имеет длину три, он преобразует значение в тип int.

const x = {
  "Province/State": "",
  "Country/Region" : "US",
  "Lat" : "37.0902",
  "Long" : "-95.7129",
  "1/22/20" : "0",
  "1/23/20": "0",
  "1/24/20": "0",
  "1/25/20": "0",
  "1/26/20": "0",
  "1/27/20": "0",
  "1/28/20": "0",
  "1/29/20": "0",
  "1/30/20": "0",
  "1/31/20": "0",
  "2/1/20": "0",
  "2/2/20": "0",
  "2/3/20": "0",
  "2/4/20": "0",
  "2/5/20": "0",
  "2/6/20": "0",
  "2/7/20": "0",
  "2/8/20": "0"
}


function returnModifiedObject(theObject) {

  const newObject = {...theObject} //spread syntax makes copy of object contents
  newObject["Lat"] = parseFloat(newObject["Lat"])
  newObject["Long"] = parseFloat(newObject["Long"])

  for (const prop in newObject) {
    if(prop.split("/").length === 3){
        newObject[prop] = parseInt(newObject[prop])
      }
  }
  
  return newObject
}

const y = returnModifiedObject(x)
console.log(y)
0 голосов
/ 23 апреля 2020

function converter(obj) {

const entries = Object.keys(obj).map(key => {
if(key === 'Lat' || key === 'Long') {
return [key, parseFloat(obj[key])];
}
const date = new Date(key);
return date.getDate() !== date.getDate() ? [key, obj[key]] : [key, Number(obj[key])];
})

return Object.fromEntries(new Map(entries));
}


const data = {
'Province/State': "",
'Country/Region': "US,",
'Lat': "37.0902",
'Long': "-95.7129",
'1/22/20': "0",
'1/23/20': "0",
'1/24/20': "0",
'1/25/20': "0",
'1/26/20': "0",
'1/27/20': "0",
'1/28/20': "0",
'1/29/20': "0",
'1/30/20': "0",
'1/31/20': "0",
'2/1/20': "0",
'2/2/20': "0",
'2/3/20': "0",
'2/4/20': "0",
'2/5/20': "0",
'2/6/20': "0",
'2/7/20': "0",
'2/8/20': "0",
}
console.log(converter(data));
...