Как преобразовать строку свойств объекта в целое число в javascript - PullRequest
3 голосов
/ 06 апреля 2020

Я хотел бы знать, как преобразовать строку свойств объекта в целое число в 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"}
]

Ответы [ 3 ]

4 голосов
/ 06 апреля 2020

Это должно сделать работу:

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)

Нажмите «Выполнить фрагмент кода», чтобы увидеть результат

0 голосов
/ 06 апреля 2020

Вы можете использовать Object.entries() и .reduce() методы для перебора пар ключ-значение в ваших данных и использовать Number и Number.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; }
0 голосов
/ 06 апреля 2020

Итерации по Object.keys () дважды. Если значение, соответствующее ключу, является числом, тогда parseInt значение иначе устанавливает значение по умолчанию, которое присутствовало ранее

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; }
...