Сериализация объекта JS с другой логикой для свойств объекта

1

Привет, мне нужно преобразовать числовые значения моего объекта в строку. Но разные свойства имеют разные правила преобразования.

Мой образец объекта:

{
name: "Name"
sRatio: 1.45040404
otherMetric: 0.009993
}

Я использую JSON.stringify для преобразования моего начального объекта.

let replacemet = {}
JSON.stringify(metrics[0], function (key, value) {
  //Iterate over keys
  for (let k in value) {
    if ((k !== "sRatio") ||  (k !== "name"))  {
      replacemet[k] = (100*value[k]).toFixed(2) + "%"
    } else {
      if( k === "name") {
        replacemet[k] = "yo!"+value[k]
      } else{
        replacemet[k] = value[k].toFixed(2)
      }
    }
  }
})

Но мои условия не срабатывают, и все свойства конвертируются одинаково.

  • 5
    if ((k !== "sRatio") || (k !== "name")) всегда будет истинным. Просто используйте if (k == "name") {} else if (k == "sRatio") {} else {}
  • 0
    || должно быть && . См. Stackoverflow.com/questions/26337003/…
Показать ещё 1 комментарий
Теги:

3 ответа

1

Задача обратного вызова replacer заключается не в том, чтобы заполнить какой-то глобальный объект replacemet а скорее для того, чтобы return новое значение.

Я думаю, вы ищете что-то вроде

JSON.stringify(sample, function (key, value) {
  if (key == "sRatio") {
    return value.toFixed(2);
  } else if (key == "name") {
    return "yo!"+value;
  } else if (typeof value == "number") {
    return (100*value).toFixed(2) + "%"
  } else {
    return value;
  }
})
0

Надеюсь помочь тебе. Я добавляю, когда динамическое свойство

         metrics =
            [
            {
            name: "Name",
            sRatio: 1.45040404,
            otherMetric:0.009993
            },
            {
            name: "Name1",
            sRatio: 2.45040404,
            otherMetric: 1.009993
            }
             ]
           ;
            let source = JSON.stringify(metrics);

            
           
            let arrJson  = new Array();
            //arrJson = {};
            metrics.forEach(function(value){
                let replacemet = {};
            
                for(var k in value) {
                
                 
                    if( k.toString().trim()  == "name") {
                        replacemet[k] =    "yo!"+value[k] ;
                   
                      } 
                     else 
                    if ( (  k.toString().trim() !== "sRatio") &&  ( k.toString().trim()  !== "name"))  {
                      replacemet[k] =  (100* value[k] ).toFixed(2).toString() + "%" ;
                    } else {
                     
                        replacemet[k] =    value[k].toFixed(2) ;
                      
                    }
                
                   
                }
                
               
               
               arrJson.push(JSON.stringify(replacemet)) ;
              
               
            });

           console.log(arrJson);
0

Попробуйте использовать блок переключателей, который будет действительно хорош для этого. Подробное описание переключателя.

let replacemet = {}
JSON.stringify(metrics[0], function (key, value) {
  //Iterate over keys
  for (let k in value) {       
    switch(k) {
    case "name":
        replacemet[k] = "yo!"+value[k];
        break;
    case "sRatio":
        replacemet[k] = value[k].toFixed(2);
        break;
    default:
        replacemet[k] = value[k].toFixed(2);
    }
  }
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню