我有一个数组,其中的项如下图所示,我想删除重复项
[L7-LO, %L7-LO]
来自该数组。
场景1:
this.formulalist.filter((el, i, a) => i == a.indexOf(el))
方案2:
Observable.merge(this.formulalist).distinct((x) => x.Value)
.subscribe(y => {
this.formulalist.push(y)
});
方案3:
this.formulalist.forEach((item, index) => {
if (index !== this.formulalist.findIndex(i => i.Value == item.Value))
{
this.formulalist.splice(index, 1);
}
});
以上三种情况均无法从该阵列中删除重复项。有人可以帮忙这个查询吗?
答案 0 :(得分:1)
没有必要使用vanillajs 过滤仅出现一次的元素,并将第一次出现的内容添加到新列表中
let newFormulalist = formulalist.filter((v,i) => formulalist.findIndex(item => item.value == v.value) === i);
答案 1 :(得分:1)
const result = Array.from(this.item.reduce((m, t) => m.set(t.name, t), new Map()).values());
希望这行得通!
答案 2 :(得分:1)
// user reduce method to remove duplicates from object array , very easily
this.formulalist= this.formulalist.reduce((a, b) => {
if (!a.find(data => data.name === b.name)) {
a.push(b);
}
return a;
}, []);
// o/p = in formulalist you will find only unique values
答案 3 :(得分:0)
尝试填充没有重复项的新数组。稍后将新数组分配给Formulalist。
newArr = []
this.formulalist.forEach((item, index) => {
if (this.newArr.findIndex(i => i.Value == item.Value) === -1)
{
this.newArr.push(item)
}
});
this.formulalist = this.newArr
答案 4 :(得分:0)
使用reducer返回唯一对象的新数组:
const input = [{
value: 'L7-LO',
name: 'L7-LO'
},
{
value: '%L7-LO',
name: '%L7-LO'
},
{
value: 'L7-LO',
name: 'L7-LO'
},
{
value: '%L7-LO',
name: '%L7-LO'
},
{
value: 'L7-L3',
name: 'L7-L3'
},
{
value: '%L7-L3',
name: '%L7-L3'
},
{
value: 'LO-L3',
name: 'LO-L3'
},
{
value: '%LO-L3',
name: '%LO-L3'
}
];
console.log(input.reduce((acc, val) => {
if (!acc.find(el => el.value === val.value)) {
acc.push(val);
}
return acc;
}, []));
答案 5 :(得分:0)
通过将值分配给某些对象属性可以更快地过滤唯一值-不会重复。 对于初始数组的每个+1成员,这种方法越来越好,因为循环会导致算法快速复杂化
let arr = [
{value: 'L7-LO', name: 'L7-LO'},
{value: '%L7-LO', name: '%L7-LO'},
{value: 'L7-LO', name: 'L7-LO'},
{value: '%L7-LO', name: '%L7-LO'},
{value: 'L7-L3', name: 'L7-L3'},
{value: '%L7-L3', name: '%L7-L3'},
{value: 'LO-L3', name: 'LO-L3'},
{value: '%LO-L3', name: '%LO-L3'}
];
let obj = {};
const unique = () => {
let result = [];
arr.forEach((item, i) => {
obj[item['value']] = i;
});
for (let key in obj) {
let index = obj[key];
result.push(arr[index])
}
return result;
}
arr = unique(); // for example;
console.log(arr);
答案 6 :(得分:0)
如果您使用的是ES6及更高版本,则使用地图和过滤器功能的基本JS会很容易。
ptrace