javascript - 使用相同的键动态合并对象数组

标签 javascript jquery arrays object

我想使用相同的键动态合并多个对象的单个数组。数据示例如下:

var data = [{
  ReportTime: "30 Apr 2017BDT",
  Rate: "1.00000",
  AvgGrowth: "0.0"
}, {
  ReportTime: "30 Apr 2017BDT",
  Rate: "0.01107",
  AvgGrowth: "0.1"
}, {
  ReportTime: "29 Apr 2017BDT",
  Rate: "1.00000",
  AvgGrowth: "0.0"
}, {
  ReportTime: "29 Apr 2017BDT",
  Rate: "0.01107",
  AvgGrowth: "-0.5"
}]

我想生成这样的数据

newData = [{
  "30 Apr 2017BDT",
  "1.00000",
  "0.0",
  "0.01107",
  "0.1"
}, {
  "29 Apr 2017BDT",
  "1.00000",
  "0.0",
  "0.01107",
  "-0.5"
}];

我需要建议或帮助如何解决此问题。

最佳答案

您的预期输出看起来不是有效的 JS。但是,您可以使用 .reduce() 等几种方法迭代数组来获取数组的数组。 , .map()Object.entries() :

const data = [
  {ReportTime: "30 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"},
  {ReportTime: "30 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "0.1"},
  {ReportTime: "29 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"},
  {ReportTime: "29 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "-0.5"}
];

const result = Object.entries(
  data.reduce((r, {ReportTime, ...rest}) => {
    r[ReportTime] = (r[ReportTime] || []).concat(Object.values(rest));
    return r;
  }, {})
).map(([k, v]) => [k, ...v]);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

这是使用 es5(旧)语法的替代方法:

var data = [
  {ReportTime: "30 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"},
  {ReportTime: "30 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "0.1"},
  {ReportTime: "29 Apr 2017BDT", Rate: "1.00000", AvgGrowth: "0.0"},
  {ReportTime: "29 Apr 2017BDT", Rate: "0.01107", AvgGrowth: "-0.5"}
];
var key = 'ReportTime';

var reducer = function(data, key) {
  var result = [];
  var map = {};
  
  data.forEach(function(o, i) {
    map[o[key]] = map[o[key]] || [];
    
    for(var k in o) {
      if(!(k === key)) { map[o[key]].push(o[k]); }
    };
  });
  
  for(var j in map) {
    result.push([].concat(j, map[j]));
  };
  
  return result;
};

console.log(reducer(data, key));

关于javascript - 使用相同的键动态合并对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61097200/

相关文章:

jquery - 动态添加的输入字段的表单集合问题

javascript - 有没有办法使用 jQuery 或 javascript 全屏显示浏览器窗口?

javascript - 当值为法语名称时,jQuery 数据选项会 chop

javascript - 如何克隆(和恢复)DOM 子树

javascript - JS 或 Jquery 更改类名的通用方法

java - Java 中的随机数生成

javascript - 纯函数: state content vs.状态引用

javascript - Kendo Grid 删除事件的自定义警报

javascript - 如何强制 javascript 数组继承我的自定义对象?

javascript - 你如何遍历数组并只提取键 :value that are specific values?