首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组中查找具有重复值的对象

在数组中查找具有重复值的对象
EN

Stack Overflow用户
提问于 2022-10-06 23:53:34
回答 2查看 57关注 0票数 -2

我希望所有的name1和name2在每个子数组中都是唯一的。

代码语言:javascript
复制
    [
        { id: 1, name1: a, name2: b },
        { id: 2, name1: c, name2: d },
        { id: 3, name1: e, name2: a }
        
    ],
    [
        { id: 4, name1: t, name2: k },
        { id: 5, name1: j, name2: h },
        { id: 6, name1: z, name2: x },
    ],
]

在本例中,id-1 name1和id-3 name2的值为'a',因此我将id-3推到下一个子数组,其中没有匹配id-3s name1和name2的name1和name2。

代码语言:javascript
复制
    [
        { id: 1, name1: a, name2: b },
        { id: 2, name1: c, name2: d },
        
    ],
    [
        { id: 4, name1: t, name2: k },
        { id: 5, name1: j, name2: h },
        { id: 6, name1: z, name2: x },
        { id: 3, name1: e, name2: a },
    ],
]

如果没有这样的子数组,其中id-3,name1和name2将是唯一的,我想创建一个新的子数组并将id-3推入其中。

EN

回答 2

Stack Overflow用户

发布于 2022-10-07 00:30:12

您可以构建确定特定对象是否为“重复”的函数,然后迭代数组,过滤出重复的内容,并将它们推送到数组中的下一个条目。如果他们也是那个条目中的一个欺骗者,他们会被推到下一个条目,等等。

代码语言:javascript
复制
const data = [
    [
        { id: 1, name1: 'a', name2: 'b' },
        { id: 2, name1: 'c', name2: 'd' },
        { id: 3, name1: 'e', name2: 'a' }
        
    ],
    [
        { id: 4, name1: 't', name2: 'k' },
        { id: 5, name1: 'j', name2: 'h' },
        { id: 6, name1: 'z', name2: 'x' },
    ],
]

// function to determine if an object's name1 or name2
// property exists in an other object with a lower index
const isdupe = (obj, idx, arr) => 
  arr.findIndex(({ name1, name2 }, i) => [name1, name2].includes(obj.name1) || [name1, name2].includes(obj.name2)) != idx

const isnotdupe = (obj, idx, arr) => !isdupe(obj, idx, arr)

// iterate over the entries in the data array
for (let i = 0; i < data.length; i++) {
  // find the duplicates in this array
  let dupes = data[i].filter(isdupe)
  // if there are any, add (concat) them to the next array
  // (data[i+1] || []) will create a new entry if one doesn't exist
  if (dupes.length) data[i+1] = (data[i+1] || []).concat(dupes)
  // filter this array to only be non-duplicates
  data[i] = data[i].filter(isnotdupe)
}

console.log(data)

票数 1
EN

Stack Overflow用户

发布于 2022-10-07 00:09:29

我不太清楚你在这里要求什么,因为你似乎掌握了这个概念,但我要试着去回答它,所以如果这不是一个100%合适的答案的话。

每次将项添加到数组中时,您都可以创建一个for语句,该语句遍历数组上的每个项,并检查( item == new item)是否将其推入数组2,并重复检查过程。如果您正在询问与它相关的特定命令,我使用的一个很好的方法是https://www.w3schools.com更具体地解决这个问题,https://www.w3schools.com/jsref/jsref_includes_array.asp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73981032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档