【发布时间】:2021-09-27 01:18:13
【问题描述】:
伙计们,我做了一个简单的例子来说明我的问题。我有 3 个对象数组,datasOne、datasTwo 和 datasThree,我想要的是只返回一个包含 3 个数组中的对象的新数组。例如,如果 3 个数组中只有 Gustavo,则返回他。但是有一个细节是,如果datasThree 是一个空数组,那么它只会带来来自datasOne 和datasTwo 的共同数据,并且如果只有datasTwo 有数据并且其他两个数组有空, 那么它将只返回来自datasTwo 的数据。换句话说,它只从有数据的数组中返回相似的数据。我设法做到了这个算法,它按照我想要的方式工作,但我想知道另一种方法来使它不那么冗长,也许更简单,并且在我添加更多数组进行比较的情况下也可以工作,例如dataFour。我感谢任何可以帮助我的人。
我的代码如下:
let datasOne = [
{ id: 1, name: 'Gustavo' },
{ id: 2, name: 'Ana' },
{ id: 3, name: 'Luiz' },
{ id: 8, name: 'Alice' }
]
let datasTwo = [
{ id: 1, name: 'Gustavo' },
{ id: 3, name: 'Luiz' },
{ id: 8, name: 'Alice' }
]
let datasThree = [
{ id: 1, name: 'Gustavo' },
{ id: 3, name: 'Luiz' },
{ id: 2, name: 'Ana' },
{ id: 5, name: 'Kelly' },
{ id: 4, name: 'David' }
]
let filtered
if (datasOne.length > 0 && datasTwo.length > 0 && datasThree.length > 0) {
filtered = datasOne.filter(firstData => {
let f1 = datasThree.filter(
secondData => firstData.id === secondData.id
).length
let f2 = datasTwo.filter(
secondData => firstData.id === secondData.id
).length
if (f1 && f2) {
return true
}
})
} else if (datasOne.length > 0 && datasTwo.length > 0) {
filtered = datasOne.filter(firstData => {
return datasTwo.filter(secondData => firstData.id === secondData.id).length
})
} else if (datasOne.length > 0 && datasThree.length > 0) {
filtered = datasOne.filter(firstData => {
return datasThree.filter(secondData => firstData.id === secondData.id)
.length
})
} else if (datasTwo.length > 0 && datasThree.length > 0) {
filtered = datasTwo.filter(firstData => {
return datasThree.filter(secondData => firstData.id === secondData.id)
.length
})
} else if (datasThree.length > 0) {
filtered = datasThree
} else if (datasTwo.length > 0) {
filtered = datasTwo
} else if (datasOne.length) {
filtered = datasOne
}
console.log(filtered)
【问题讨论】:
-
一个数组是否只有一次唯一的对象?如果一个数组有两次
{ id: 1, name: 'Gustavo' }是可能的吗? -
是否可以有 2 个
id给不同的人? -
没有。每个人的 ID 都是唯一的。在我制作的算法中,'filtered' 的返回将是 [ { "id": 1, "name": "Gustavo"}, { "id": 3, "name": "Luiz"}] 因为这些对象在 3 个数组中找到
标签: javascript arrays javascript-objects