如何获取数组中的重复元素

How to get duplicate elements in an array

我正在用 ReactJs 编写代码 我有一个像这样的对象数组

[
{
        createdBy: "DEF",
        createdDate: "2020",
        lastModifiedDate: "2021",
        name: "John Doe",
        section: {
            createdBy: "A2C",
            status: "ACTIVE",
        },
        sectionName: "Mechanical",
    },

{
        createdBy: "ABC",
        createdDate: "2020",
        lastModifiedDate: "2021",
        name: "John Doe",
        section: {
            createdBy: "ABC",
            status: "ACTIVE",
        },
        sectionName: "Mechanical",
    },

    {
        createdBy: "ABC",
        createdDate: "2020",
        lastModifiedDate: "2021",
        name: "John Doe",
        section: {
            createdBy: "XYZ",
            status: "ACTIVE",
        },
        sectionName: "Mechanical",
    },

    {
        createdBy: "A1C",
        createdDate: "2020",
        lastModifiedDate: "2021",
        name: "John Wick",
        section: {
            createdBy: "ABC",
            status: "ACTIVE",
        },
        sectionName: "Mechanical",
    },
];

这里,唯一相同的是“名字”,所以在名字的基础上,我想将重复的对象存储在新的数组中。

我试过这样

let temp = [];
for (const i of response) {
    if (!temp.includes(i)) {
        temp.push(i);
        console.log("if loop", i);
    } else {
        console.log("else loop", response);
    }
}

但是控件永远不会转到 else,因为它认为每个对象都是不同的。

我需要一个对象的第一次出现,但当“名称”元素重复出现时,该对象应该存储在一个新数组中。

预计:-

[
    {
        createdBy: "ABC",
        createdDate: "2020",
        lastModifiedDate: "2021",
        name: "John Doe",
        section: {
            createdBy: "ABC",
            status: "ACTIVE",
        },
        sectionName: "Mechanical",
    },
    {
        createdBy: "ABC",
        createdDate: "2020",
        lastModifiedDate: "2021",
        name: "John Doe",
        section: {
            createdBy: "XYZ",
            status: "ACTIVE",
        },
        sectionName: "Mechanical",
    },


]

不确定这是否能解决您遇到的特定问题,但是 不使用 helprjs

const arr1 = [{ id: 1, name: 'Jack'}, { id: 2, name: 'Jack'}];
const arr2 = [{ id: 2, name: 'Jane'}, { id: 3, name: 'Rod'}];

mergeArrays(arr1, arr2, "name");
// [{ id: 1, name: 'Jack'}, { id: 2, name: 'Jane'}, { id: 3, name: 'Rod'}];

mergeArrays(arr1, arr2, "id");
// [{ id: 1, name: 'Jack'}, { id: 2, name: 'Jack'}, { id: 3, name: 'Rod'}];

查看 demo

您可以维护一个 tracker 对象来检查是否已经访问过同名对象。如果已访问,则将对象推入 duplicate 数组,否则推入 unique 数组。试试这个-

const data=[{createdBy:"ABC",createdDate:"2020",lastModifiedDate:"2021",name:"John Doe",section:{createdBy:"ABC",status:"ACTIVE"},sectionName:"Mechanical"},{createdBy:"ABC",createdDate:"2020",lastModifiedDate:"2021",name:"John Doe",section:{createdBy:"A2C",status:"ACTIVE"},sectionName:"Mechanical"},{createdBy:"A1C",createdDate:"2020",lastModifiedDate:"2021",name:"John Doe",section:{createdBy:"ABC",status:"ACTIVE"},sectionName:"Mechanical"}];

const track = {};
const unique = [];
const duplicate = [];

for (const item of data) {
    if (track?.[item.name] === undefined) {
        unique.push(item);
        track[item.name] = true;
    } else {
        duplicate.push(item);
    }
}

console.log('unique', unique);
console.log('duplicate', duplicate);
.as-console-wrapper {min-height: 100%!important; top: 0}

let count=0
let temp = response;
let duplicateArray=[]
for (const i of response) {
  count=0
  if(temp.find(t => t.name === i.name)){
     count++
  }
  if(count>0){
     duplicateArray.push(i)
  }
}