javascript - 向数组添加通用对象和格式

标签 javascript arrays object

我正在尝试添加一个公共(public)对象数组,应该类似于 fund_asset_class_focus 和年份,并且必须格式化为如下所示的数组数组(["fund_asset..","2017-total allocation",2018,2019]).

data = [
  {
    "allocation": 60.30,
    "dt": "2017",
    "fund_asset_class_focus": "U.S. Fixed Income"
  },
  {
    "allocation": 50,
    "dt": "2017",
    "fund_asset_class_focus": "U.S. Fixed Income"
  }
  {
    "allocation": 39.80,
    "dt": "2018",
    "fund_asset_class_focus": "U.S. Fixed Income"
  },
  {
    "allocation": 40.7,
    "dt": "2019",
    "fund_asset_class_focus": "U.S. Fixed Income"
  },
  {
    "allocation": 20,
    "dt": "2018",
    "fund_asset_class_focus": "Cash"
  },
  {
    "allocation": 9.7,
    "dt": "2018",
    "fund_asset_class_focus": "Cash"
  }
  {
    "allocation": 16,
    "dt": "2018",
    "fund_asset_class_focus": "Credit"
  },
  {
    "allocation": 16,
    "dt": "2019",
    "fund_asset_class_focus": "Credit"
  },
  {
    "allocation": 16,
    "dt": "2019",
    "fund_asset_class_focus": "Credit"
  }
]

data = [["U.S. Fixed Income",110.30,39.80, 40.7],["Cash",0,29.7,0],["Credit",0,16,32]]

我尝试使用下面的代码来解决这个问题,但是,它未能满足我的要求:

for (let i in data) {
  var tempObj = {};
  if (obj[years[0]]) 
    tempObj[years[0]] = obj[years[0]];
  else
    tempObj[years[0]] = {};

  if (obj[data[i]["fund_asset_class_focus"]]) {

  }
}

最佳答案

创建一个名为 years 的映射对象,它将每年作为键,并将年份在输出数组中的位置作为它的值。在这里,我假设你只有 3 年。你也可以让它变得动态。然后使用reduce。创建一个累加器对象,每个 fund_asset_class_focus 作为键,输出中需要的嵌套数组作为值。

const data=[{allocation:60.3,dt:"2017",fund_asset_class_focus:"U.S. Fixed Income"},{allocation:50,dt:"2017",fund_asset_class_focus:"U.S. Fixed Income"},{allocation:39.8,dt:"2018",fund_asset_class_focus:"U.S. Fixed Income"},{allocation:40.7,dt:"2019",fund_asset_class_focus:"U.S. Fixed Income"},{allocation:20,dt:"2018",fund_asset_class_focus:"Cash"},{allocation:9.7,dt:"2018",fund_asset_class_focus:"Cash"},{allocation:16,dt:"2018",fund_asset_class_focus:"Credit"},{allocation:16,dt:"2019",fund_asset_class_focus:"Credit"},{allocation:16,dt:"2019",fund_asset_class_focus:"Credit"}];

const years = { 2017: 1, 2018: 2, 2019: 3 },
      defaultValues = Object.keys(years).map(_ => 0);

const merged = data.reduce((r, o) => {
  const { allocation, dt, fund_asset_class_focus: fund } = o;
  r[fund] = r[fund] || [fund, ...defaultValues];
  r[fund][years[dt]] += allocation;
  return r;
}, {})

const output = Object.values(merged);

console.log(JSON.stringify(output))

关于javascript - 向数组添加通用对象和格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57036110/

相关文章:

java - 可变参数类?

将二维数组复制到另一个

javascript - 我怎样才能获得深层嵌套对象的一些值(value)?

javascript - 访问 javascript 对象中的第一个数组

javascript - 如何在 Virtual Earth 中找到鸟瞰场景的准确纬度/经度坐标?

javascript - 如何使用 Protractor js 测试非 Angular 站点?

c - C 中比较字符串的问题

javascript - 有没有办法使用扩展运算符合并两个对象,使得结果具有一个对象的键,但具有第二个对象的值?

javascript - 从客户端验证 C# 中具有数十个属性的对象更改的任何属性

java - 幻灯片链接、滑动、按钮