如何在 ES6 中将对象值相乘并保留它们的键

我有以下包含转换因子的对象:


  const convertToYards =

  {

    "feet": 3,

    "meters": 0.9144,

    "yards": 1

  }

然后有一个变量包含这样的数字: const maximumYards = 500;


我正在尝试找出一种方法将所有值乘以其中convertToYards的数字,maximumYards以便像这样创建一个新对象:


  const maximums =

  {

    "feet": 1500,

    "meters": 457.2,

    "yards": 500

  }

我试过这个


const maximums = Object.values(convertToYards).map(o => o * maximumYards);

但这会创建一个数组而不是一个对象,因此它不会携带原始键名。应该如何修改以获得所需的输出?


慕丝7291255
浏览 81回答 2
2回答

万千封印

您可以通过组合Object.entries(获取数组)、map(映射值)和Object.fromEntries(再次获取对象)来实现:const maximums = Object.fromEntries(     Object.entries(convertToYards).map(([name, value]) => [name, value * maximumYards])     );const convertToYards = {    "feet": 3,    "meters": 0.9144,    "yards": 1};const maximumYards = 500;const maximums = Object.fromEntries(    Object.entries(convertToYards).map(([name, value]) => [name, value * maximumYards]));console.log(maximums);或者只是使用一个for-in循环;但是,如果可能有继承的属性,您可能需要清除convertToYards它们:const maximums = {};for (const name in convertToYards) {    maximums[name] = convertToYards[name] * maximumYards;}const convertToYards = {    "feet": 3,    "meters": 0.9144,    "yards": 1};const maximumYards = 500;const maximums = {};for (const name in convertToYards) {    maximums[name] = convertToYards[name] * maximumYards;}console.log(maximums);中间立场是使用keyswith for-of:const maximums = {};for (const name of Object.keys(convertToYards)) {    maximums[name] = convertToYards[name] * maximumYards;}const convertToYards = {    "feet": 3,    "meters": 0.9144,    "yards": 1};const maximumYards = 500;const maximums = {};for (const name of Object.keys(convertToYards)) {    maximums[name] = convertToYards[name] * maximumYards;}console.log(maximums);

慕婉清6462132

根据评论,您可以使用for .. in如下代码片段中所示的普通旧版本:const convertToYards = {  feet: 3,  meters: 0.9144,  yards: 1,};let maximums = {};for (let a in convertToYards) {  maximums[a] = convertToYards[a] * maximumYards;}console.log(maximums);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript