删除数组中的重复对象

时间:2018-01-16 02:05:19

标签: javascript lodash

我有一个对象数组,我试图从中删除重复的元素。

但有条件。我只想删除title === title

的内容

如果它等于title,那么它应该删除没有taggedPosts属性的对象

example-structure

最终结果将如下所示

final-result

我已经尝试了很多方法,但它们似乎只返回没有taggedPosts属性的那些方法,并删除那些属性不是我想要的属性。特别是来自lodash的_.uniq(array)

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我建议您使用lodash中的_.remove函数。

对于每个元素,检查是否存在欺骗,如果该元素没有taggedPosts属性,则删除该元素。



const data = [
  {title: '1', taggedPosts: []},
  {title: '2', taggedPosts: []},
  {title: '3', taggedPosts: []},
  {title: '4', taggedPosts: []},
  {title: '1'},
  {title: '5'},
  {title: '3'},
  {title: '6'},
];

_.remove(data, e => {
  // Search for a potential duplicate
  const dupe = data.find(d => d.title === e.title && d !== e);
  
  // Remove it if there is a duplicate and the current element does not have taggedPosts
  return dupe && !e.taggedPosts;
});

console.log(data);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
&#13;
&#13;

注意:remove修改了数组。

答案 1 :(得分:0)

这是vanilla javascript方式

对于数组中的每个对象,我们正在寻找具有相同title和taggedPosts的另一个对象,如果是,我们会过滤掉当前对象。

data.filter((item, index) => !data.find((innerItem, innInd) => innerItem.title === item.title && innerItem.taggedPosts  && index !== innInd))