我要删除以下数据:
实际
where num in (select course from enrollment)
期望
var data = [
['dupeValue', { data: 123 }],
['dupeValue', { data: 123 }],
['otherValue', { data: 1111111 }],
['dupeValue', { data: 123 }]
]
我尝试了以下操作,但不起作用:
var data = [
['dupeValue', { data: 123 }],
['otherValue', { data: 1111111 }]
]
我想念什么?
data.filter((value, i, arr) => {
return value[0] !== arr[i][0]
})
// outputs []
答案 0 :(得分:3)
您的过滤器测试是
var result = data.filter((value, i, arr) => {
return value[0] !== arr[i][0]
});
但是arr[i]
将始终引用正在迭代的当前元素-value
,因此无论输入如何,value[0] !== arr[i][0]
都将始终求值为false
。 (因为value === arr[i]
,所以value[0] === arr[i][0]
)。
您可以将value[0]
添加到Set
,并在测试时检查该值是否存在于该集合中:
var data = [
['dupeValue', { data: 123 }],
['dupeValue', { data: 123 }],
['otherValue', { data: 1111111 }],
['dupeValue', { data: 123 }]
]
const firstElements = new Set();
var result = data.filter(([firstElement]) => {
const alreadyHas = firstElements.has(firstElement);
firstElements.add(firstElement);
return !alreadyHas;
})
console.log(result)
答案 1 :(得分:3)
您可以使用reduce()
映射到对象,并使用Object.values()
获取结果数组
var data = [
['dupeValue', { data: 123 }],
['dupeValue', { data: 123 }],
['otherValue', { data: 1111111 }],
['dupeValue', { data: 123 }]
]
var result = Object.values(data.reduce((a, c) => (a[c[0]] = c, a), {}))
console.log(result)