Javascript 如果属性值匹配,则从数组中删除对象
我有一组对象,看起来像:Javascript 如果属性值匹配,则从数组中删除对象,javascript,arrays,angular,Javascript,Arrays,Angular,我有一组对象,看起来像: { "brandid": id, "brand": string, "id": id, "categoryId": id, "category": string, "factory": string, "series": string, "status": 0, "subStatus": 1 } 如果序列属性值与数组中其他对象中的另一个序列属性值匹配,则需要从数组中删除该对象 目前,我已尝试使用以下方法将它们推送到重复阵列:
{
"brandid": id,
"brand": string,
"id": id,
"categoryId": id,
"category": string,
"factory": string,
"series": string,
"status": 0,
"subStatus": 1
}
如果序列属性值与数组中其他对象中的另一个序列属性值匹配,则需要从数组中删除该对象
目前,我已尝试使用以下方法将它们推送到重复阵列:
const seriesResCopy = seriesRes;
const dupArray = []
for (const thing of seriesResCopy) {
for (const item of seriesRes) {
if (thing.series === item.series) {
dupArray.push(item);
}
}
}
但这是行不通的。从我的例子来看,我的问题是我没有一个明确的重复值列表来寻找
非常感谢您的帮助。您可以使用一组序列来筛选重复项:
const exists = new Set();
seriesRes = seriesRes.filter(({series}) => !exists.has(series) && exists.add(series));
这使用了:Array.prototype.filter
、对象分解和一些逻辑技巧
通过改变数组也可以做到这一点:
const exists = new Set();
for(const [index, {series}] of seriesRes.entries()) {
if(!exists.has(series) {
exists.add(series);
} else {
seriesRes.splice(index, 1);
}
}
您可以使用一组序列来筛选重复项:
const exists = new Set();
seriesRes = seriesRes.filter(({series}) => !exists.has(series) && exists.add(series));
这使用了:Array.prototype.filter
、对象分解和一些逻辑技巧
通过改变数组也可以做到这一点:
const exists = new Set();
for(const [index, {series}] of seriesRes.entries()) {
if(!exists.has(series) {
exists.add(series);
} else {
seriesRes.splice(index, 1);
}
}
要从阵列中筛选重复项并保留第一个实例,请执行以下操作:
let seriesWithoutDuplicates = seriesRes.filter((s, i, self) => {
return self.findIndex(z => z.series === s.series) === i;
});
要从阵列中筛选重复项并保留第一个实例,请执行以下操作:
let seriesWithoutDuplicates = seriesRes.filter((s, i, self) => {
return self.findIndex(z => z.series === s.series) === i;
});
push()。这可以通过.splice
来完成,所以你想过滤掉重复的、三次的,等等?仅保留第一个实例?我想筛选重复项并保留第一个实例。@mplungjan“类似的对象数组”不是“我有类似的对象”。不要改变问题push()
不会从数组中删除元素,它只是将一个引用(或复制,如果是基元的话)放入另一个数组中。实际上不会删除任何内容。这可以通过.splice
来完成,所以你想过滤掉重复的、三次的,等等?仅保留第一个实例?我想筛选重复项并保留第一个实例。@mplungjan“类似的对象数组”不是“我有类似的对象”。不要改变问题!请分解代码并注释它的作用。它非常优雅,但非常新颖(截至2018年6月),这是一个非常棒的想法,我已经用过了,或者更晚了。@mplungjan如果你改变问题,为什么答案仍然合适@普伦詹OP已经接受了这个答案。因此,如果你说“这不适用于我用OPs代码编写的奇怪代码片段”,那么这是你的错,而不是我的错。这不是询问者第一次发布对象并将其称为数组。所以我所要做的就是把它包起来。如果OP在我看来显示了一个有效的数组,那将是有用的。所以没那么奇怪。不管怎么说,你的代码仍然很有趣。请分解代码并评论它的作用。它非常优雅,但非常新颖(截至2018年6月),这是一个非常棒的想法,我已经用过了,或者更晚了。@mplungjan如果你改变问题,为什么答案仍然合适@普伦詹OP已经接受了这个答案。因此,如果你说“这不适用于我用OPs代码编写的奇怪代码片段”,那么这是你的错,而不是我的错。这不是询问者第一次发布对象并将其称为数组。所以我所要做的就是把它包起来。如果OP在我看来显示了一个有效的数组,那将是有用的。所以没那么奇怪。无论如何,您的代码仍然很有趣