【发布时间】:2021-05-11 12:57:23
【问题描述】:
我有一个如下所示的对象数组,其中包含另一个对象数组,这些对象具有重复的 verticalName 值,需要删除这些值才能在页面上显示。
"landingPages": [
{
"programmes": [
{
"progName": "Programme 1",
"verticals": [
{
"id": "8",
"verticalName": "Law and Criminology"
}
]
}
]
},
{
"programmes": [
{
"progName": "Programme 2",
"verticals": [
{
"id": "1",
"verticalName": "Psychology and Sociology"
}
]
}
]
},
{
"programmes": [
{
"progName": "Programme 3",
"verticals": [
{
"id": "3",
"verticalName": "Computing and IT"
}
]
}
]
},
{
"programmes": [
{
"progName": "Programme 4",
"verticals": [
{
"id": "1",
"verticalName": "Psychology and Sociology"
}
]
},
{
"progName": "Programme 5",
"verticals": [
{
"id": "3",
"verticalName": "Computing and IT"
}
]
},
{
"progName": "Programme 6",
"verticals": [
{
"id": "2",
"verticalName": "Business and Management"
}
]
},
{
"progName": "Programme 7",
"verticals": [
{
"id": "3",
"verticalName": "Computing and IT"
}
]
},
{
"progName": "Programme 8",
"verticals": [
{
"id": "3",
"verticalName": "Computing and IT"
}
]
}
]
}
]
我尝试了几种解决方案,其中一些不起作用,但一个起作用,我将其复制/粘贴在下面。我已经设法将它们全部存储在一个对象数组中,只是代码在我看来真的很糟糕。我正在尝试找到一个更清洁的解决方案来解决这个问题。这是我的解决方案,我想看看它与您的解决方案相比如何,如果您能给我一些反馈,那将是非常棒的。
let known = {}
let noduplicates = programmes.map((subarray) => {
const newarrays = []
subarray.verticals.forEach((item) => {
if (
!known.hasOwnProperty(item.verticalName) &&
(known[item.verticalName] = true)
) {
newararys.push(item)
} else {
console.log('test')
}
})
console.log(newarrays)
return newarrays
})
const fil = filtered.filter((item) => item.length)
const singleArr = fil.reduce((a, b) => a.concat(b), [])
console.log(singleArr)
我想要得到的是这样的东西,基本上,只是在 verticals 数组中找到的所有对象,但是 - 没有重复:
[
{id: "1", verticalName: "Psychology and Sociology"},
{id: "3", verticalName: "Computing and IT"},
{id: "2", verticalName: "Business and Management"}
]
大家加油!
【问题讨论】:
-
定义重复。垂直?那么留下哪个 progName 呢?还是 progName 无关紧要?你希望你的最终数组是什么样子的?
-
嗨,我更新了问题。它是嵌套的“垂直”数组内的verticalName inside键。没关系,我只需要将所有不重复的值存储在一个对象数组中。
标签: javascript reactjs lodash