Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果属性值匹配,则从数组中删除对象_Javascript_Arrays_Angular - Fatal编程技术网

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在我看来显示了一个有效的数组,那将是有用的。所以没那么奇怪。无论如何,您的代码仍然很有趣