我希望所有的name1和name2在每个子数组中都是唯一的。
[
{ 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。
[
{ 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推入其中。
发布于 2022-10-07 00:30:12
您可以构建确定特定对象是否为“重复”的函数,然后迭代数组,过滤出重复的内容,并将它们推送到数组中的下一个条目。如果他们也是那个条目中的一个欺骗者,他们会被推到下一个条目,等等。
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)
发布于 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。
https://stackoverflow.com/questions/73981032
复制相似问题