我有一个对象数组,我试图从中删除重复的元素。
但有条件。我只想删除title
=== title
如果它等于title
,那么它应该删除没有taggedPosts
属性的对象
最终结果将如下所示
我已经尝试了很多方法,但它们似乎只返回没有taggedPosts
属性的那些方法,并删除那些属性不是我想要的属性。特别是来自lodash的_.uniq(array)
。
感谢您的帮助。
答案 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;
注意:remove修改了数组。
答案 1 :(得分:0)
这是vanilla javascript方式
对于数组中的每个对象,我们正在寻找具有相同title和taggedPosts的另一个对象,如果是,我们会过滤掉当前对象。
data.filter((item, index) => !data.find((innerItem, innInd) => innerItem.title === item.title && innerItem.taggedPosts && index !== innInd))