我有一个包含以下项目列表的数组,如图所示,我想
[L7-LO, %L7-LO]从该数组中删除重复项。
场景一:
this.formulalist.filter((el, i, a) => i == a.indexOf(el))
Run Code Online (Sandbox Code Playgroud)
场景2:
Observable.merge(this.formulalist).distinct((x) => x.Value)
.subscribe(y => {
this.formulalist.push(y)
});
Run Code Online (Sandbox Code Playgroud)
场景3:
this.formulalist.forEach((item, index) => {
if (index !== this.formulalist.findIndex(i => i.Value == item.Value))
{
this.formulalist.splice(index, 1);
}
});
Run Code Online (Sandbox Code Playgroud)
上述三种情况都无法从该数组中删除重复项。有人可以帮忙解决这个查询吗?
angular 不是必需的,使用 vanillajs 过滤仅出现一次的元素并将第一次出现的元素添加到新列表中
let newFormulalist = formulalist.filter((v,i) => formulalist.findIndex(item => item.value == v.value) === i);
Run Code Online (Sandbox Code Playgroud)
尝试填充一个没有重复的新数组。稍后将新数组分配给公式列表。
newArr = []
this.formulalist.forEach((item, index) => {
if (this.newArr.findIndex(i => i.Value == item.Value) === -1)
{
this.newArr.push(item)
}
});
this.formulalist = this.newArr
Run Code Online (Sandbox Code Playgroud)
编辑
看看上面的答案,解决方案似乎已经过时了。更好的方法是使用 an 而Array.filter()不是 a Array.forEach()。
但是,有更好的解决方案会很好,现在当我看到这个问题时,findIndex()由于额外的遍历,我觉得不是一个好方法。
我可能有一个Set并将值存储在我想要过滤的 Set 中,如果Set有这些条目,我会从数组中跳过这些元素。
或者更好的方法是 Akitha_MJ 使用的方法,非常简洁。数组长度的一个循环,循环中的 Object(Map),键是我们要删除重复项的值,而值是完整的 Object(Array 元素) 本身。在循环中重复元素时,元素将在 Map 中被简单地替换。稍后只需从 Map 中取出值。