如何区分对象列表

时间:2018-06-25 12:40:51

标签: javascript arrays javascript-objects

因为找不到任何解决方案,有没有办法做?

我有一个包含对象的数组,该数组中的每个对象都有一个x和y位置以及一个文本字段,如下所示:

[{x: 100, y: 100, text: "hello"},
 {x: 100, y: 100, text: "this is another message"},
 {x: 50, y: 25, text: "message on another place"}] 

现在,我尝试获取一个新的对象列表,其中每个位置都是唯一的,并且所有消息将是一个新的文本数组。

所以我尝试获得最终清单,如:

[{x: 100, y: 100, text: ["hello", "this is another message"]},
 {x: 50, y: 25, text: [message on another place]}]

我尝试了几种在互联网上找不到的方法。

1 个答案:

答案 0 :(得分:2)

您可以使用reduce将x和y的串联值作为键将数组分组为一个对象。使用Object.values将对象转换为数组。

let arr = [{"x":100,"y":100,"text":"hello"},{"x":100,"y":100,"text":"this is another message"},{"x":50,"y":25,"text":"message on another place"}]

let result = Object.values(arr.reduce((c, {x,y,text}) => {
  let k = x + '_' + y;
  c[k] = c[k] || {x,y,text: []};
  c[k].text.push(text);
  return c;
}, {}));

console.log(result);