Как изменить каждое значение в JS-объекте с помощью Lodash

#lodash

#Lodash

Вопрос:

У меня есть объект, подобный:

 { 
  home: 78,
  draw: 81,
  away: 36,
  u0_5: 16,
  o0_5: 26,
  u1_5: 10,
  o1_5: 68,
  u2_5: 48,
  o2_5: 50,
  u3_5: 29,
  o3_5: 31,
  u4_5: 50,
  o4_5: 5,
  u5_5: 68,
  o5_5: 56
}
  

моя цель — получить новый объект с такой же структурой, но с каждым значением, умноженным на 100, и получить ту же структуру.

  { 
   home: 7800,
   draw: 8100,
   away: 3600,
   ...
  }
  

Ответ №1:

Вы можете использовать mapValues() для решения этой проблемы вместе с обратным вызовом для преобразования каждого значения.

 const result = _.mapValues(data, v => v * 100);
  

 const data = { 
  home: 78,
  draw: 81,
  away: 36,
  u0_5: 16,
  o0_5: 26,
  u1_5: 10,
  o1_5: 68,
  u2_5: 48,
  o2_5: 50,
  u3_5: 29,
  o3_5: 31,
  u4_5: 50,
  o4_5: 5,
  u5_5: 68,
  o5_5: 56
};

const result = _.mapValues(data, v => v * 100);

console.log(result);  
 .as-console-wrapper{min-height:100%;top:0!important}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>  

Ответ №2:

С помощью Lodash /fp вы можете создать функцию с помощью _.mapValues() и _.multiply() , которая выполняет итерацию объекта и умножает каждое значение на 100:

 const fn = _.mapValues(_.multiply(100))

const obj = {"home":78,"draw":81,"away":36,"u0_5":16,"o0_5":26,"u1_5":10,"o1_5":68,"u2_5":48,"o2_5":50,"u3_5":29,"o3_5":31,"u4_5":50,"o4_5":5,"u5_5":68,"o5_5":56}

const result = fn(obj)

console.log(result)  
 <script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js lodash.fp.min.js)'></script>  

Ответ №3:

 _.forEach(data, function(value, key) {
       data.key = value*100;
});
  

Комментарии:

1. Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и почему он решает проблему, улучшило бы долгосрочную ценность ответа.