使用Underscore重新构造对象数组

Swi*_*tch 3 javascript jquery underscore.js

是否可以重新构造下面的数组

[
    {"period":"2016-09-18","mp-demo-1":30},
    {"period":"2016-09-18","MP7":20},
    {"period":"2016-09-19","mp-demo-1":13},
    {"period":"2016-09-19","MP7":33},
    {"period":"2016-09-20","mp-demo-1":39},
    {"period":"2016-09-20","MP7":29}
]
Run Code Online (Sandbox Code Playgroud)

[
    {"period":"2016-09-18","mp-demo-1":30,"MP7":20},
    {"period":"2016-09-19","mp-demo-1":13,"MP7":33},
    {"period":"2016-09-20","mp-demo-1":39,"MP7":29},
]
Run Code Online (Sandbox Code Playgroud)

我基本上需要的是通过键(句点)删除重复的条目,并将包含在这些对象中的值添加到单个对象中.

使用underscore.js可以实现吗?或者是否有另一种使用jQuery或任何其他库的方法.

Nen*_*car 5

您可以使用reduce()和的纯JavaScript进行此操作Object.assign()

var data = [
  {"period":"2016-09-18","mp-demo-1":30},
  {"period":"2016-09-18","MP7":20},
  {"period":"2016-09-19","mp-demo-1":13},
  {"period":"2016-09-19","MP7":33},
  {"period":"2016-09-20","mp-demo-1":39},
  {"period":"2016-09-20","MP7":29}
];

var obj = {}
var result = data.reduce(function(r, o) {
  if (!obj[o.period]) {
    obj[o.period] = o;
    r.push(obj[o.period]);
  } else {
    Object.assign(obj[o.period], o);
  }
  return r;
}, []);

console.log(result)
Run Code Online (Sandbox Code Playgroud)

要保留原始数据,您可以使用创建对象的克隆 Object.assign()

var data = [
  {"period":"2016-09-18","mp-demo-1":30},
  {"period":"2016-09-18","MP7":20},
  {"period":"2016-09-19","mp-demo-1":13},
  {"period":"2016-09-19","MP7":33},
  {"period":"2016-09-20","mp-demo-1":39},
  {"period":"2016-09-20","MP7":29}
];

var obj = {}
var result = data.reduce(function(r, o) {
  if (!obj[o.period]) {
    obj[o.period] = Object.assign({}, o);
    r.push(obj[o.period]);
  } else {
    Object.assign(obj[o.period], o);
  }
  return r;
}, []);

console.log(result);
console.log(data);
Run Code Online (Sandbox Code Playgroud)