繁体   English   中英

从嵌套的对象数组中删除重复项

[英]Remove duplicates from a nested array of objects

我正在尝试从嵌套的对象数组中删除重复项。

let arr = [{
  type: "horizontal",
  tiles: [{ col: 0, row: 3 }, { col: 1, row: 3 }, { col: 2, row: 3 }]
},
{
  type: "horizontal",
  tiles: [{ col: 1, row: 3 }, { col: 2, row: 3 }, { col: 0, row: 3 }]
},
{
  type: "horizontal",
  tiles: [{ col: 2, row: 3 }, { col: 1, row: 3 }, { col: 0, row: 3 }],
},
{
  type: "vertical",
  tiles: [{ col: 0, row: 5 }, { col: 0, row: 3 }, { col: 0, row: 4 }],
}];

我试图只保留唯一的顶级对象。 如您所见,tiles 数组不一定按列/行排序。

所以这里的arr会变成:

let arr = [{
  type: "horizontal",
  tiles: [{ col: 0, row: 3 }, { col: 1, row: 3 }, { col: 2, row: 3 }]
},{
  type: "vertical",
  tiles: [{ col: 0, row: 5 }, { col: 0, row: 3 }, { col: 0, row: 4 }],
}];

我已经广泛查看但无法完全找到解决我试图解决的相同问题的东西。

好的,这可能有点长,但我找不到更短的方法。 我的计划是获取一组 JSON 字符串(它提供唯一性)并将其转换回 JS 对象数组(JS 对象集不会删除重复项)。 这种方式将只获得唯一值。

但是为了使 JSON 字符串对于唯一记录相等, tiles数组必须以相同的顺序排列,所以我首先对tiles进行排序以确保顺序相同

 let arr = [{ type: "horizontal", tiles: [{ col: 0, row: 3 }, { col: 1, row: 3 }, { col: 2, row: 3 }] },{ type: "horizontal", tiles: [{ col: 1, row: 3 }, { col: 2, row: 3 }, { col: 0, row: 3 }] },{ type: "horizontal", tiles: [{ col: 2, row: 3 }, { col: 1, row: 3 }, { col: 0, row: 3 }], },{ type: "vertical", tiles: [{ col: 0, row: 5 }, { col: 0, row: 3 }, { col: 0, row: 4 }], }]; //sort for ascending order of col field arr.forEach((o,i,a) => { a[i].tiles.sort((a,b) => a.col-b.col) }) let mySet = new Set(); arr.forEach(item => mySet.add(JSON.stringify(item))) let result = [] mySet.forEach((el) => { result.push(JSON.parse(el)) }) console.log(result)
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM