javascript - 在javascript中动态设置对象键

标签 javascript

我有一个像这样的对象:

let inputData = {
  "dimensions": [
    {
      "id": "dimension_re",
      "label": "Region",
      "values": ["East", "East", "West", "SouthWest", "South","NorthEast"]
    }, 
    {
      "id": "dimension_cnt",
      "label": "County",
      "values": ["London", "Italy", "Germany", "US", "Russia","India"]
    },
    {
      "id": "measure_sales",
      "label": "Sales",
      "values": [100, 156, 432, 462, 25,100]
    }, 
    {
      "id": "measure_qty",
      "label": "Quantity",
      "values": [85, 34, 153, 434, 52, 43]
    }, 
    {
      "id": "measure_profit",
      "label": "Profit",
      "values": [123, 45, 421, 465, 451, 56]
    }
  ]
}

我的预期输出:

let expectdData = [
  {
    "Region": "East",
    "County": "London",
    "Sales": 100,
    "Quantity": 85,
    "Profit": 123
  }, 
  {
    "Region": "East",
    "County": "Italy",
    "Sales": 156,
    "Quantity": 34,
    "Profit": 45
  }, 
  {
    "Region": "West",
    "County": "Germany",
    "Sales": 432,
    "Quantity": 153,
    "Profit": 421
  }, 
  {
    "Region": "SouthWest",
    "County": "US",
    "Sales": 462,
    "Quantity": 434,
    "Profit": 465
  }, 
  {
    "Region": "South",
    "County": "Russia",
    "Sales": 25,
    "Quantity": 52,
    "Profit": 451
  },
  {
    "Region": "NorthEast",
    "County": "India",
    "Sales": 100,
    "Quantity": 43,
    "Profit": 56
  }
]

这是我获取预期数据的程序:

let actualData = [];

inputData.dimensions.forEach((e,i) => {
  let tempVal = e.label;
  e.values.forEach((elem,index) => {
    actualData[index] = new Object({
      [tempVal] : elem
    });
  })
});

console.log(actualData);

但不幸的是,我只获得每个对象的最后一项。在我的控制台中,它看起来像这样:

[
  { Profit: 123 },
  { Profit: 45 },
  { Profit: 421 },
  { Profit: 465 },
  { Profit: 451 },
  { Profit: 56 }
]

我认为,在每次迭代中,它只是覆盖“tempVal”变量。如何防止这种情况以及如何实现预期的对象数组?

最佳答案

每次迭代时都会替换整个对象,如果不存在则只需创建它,否则可以替换 key 。

let actualData = [];

inputData.dimensions.forEach((e,i)=>{
  let tempVal = e.label;
  e.values.forEach((elem,index) => {
    if (!actualData[index]) {
      actualData[index] = {}
    }
    actualData[index][tempVal] = elem
  })
});

console.log(actualData);

关于javascript - 在javascript中动态设置对象键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71814262/

相关文章:

javascript - 在 react 传单多边形(圆形)上捕获双击事件

javascript - Angular 使用全局拦截器

javascript - olx.com 如何显示类别更改的表单字段并相应提交?

javascript - 如果应用程序存在,链接到打开的 facebook 应用程序,否则网页

javascript - 屏幕覆盖捕获和传递用户操作的 Electron 应用程序

javascript - 为什么这个关键字不是指独立 JS 函数中的窗口

javascript - Sticky Div 停在底部

IE9 中的 JavaScript 日期对象允许无效日期

javascript - 我无法让 jQuery 插件 AnythingSlider 在 JS Bin 中工作

javascript - 将 AngularJS 与 BackboneJS 一起使用