javascript - 如何删除对象数组中的重复项?
问题描述
我有一个看起来像这样的数组:
var array =
[
{
key : { id : 1 , pack : "pack 1"},
values : [
{
item : { id : 1 , name : "item1"},
itemP : {id : 2 , name : "itemP12"}
},
{
item : { id : 4 , name : "item4"},
itemP : {id : 2 , name : "itemP12"}
},
]
}
]
我想删除重复的 itemP,所以使用一个函数,它看起来像这样:
var array =
[
{
key : { id : 1 , pack : "pack 1"},
values : [
{
item : { id : 1 , name : "item1"},
itemP : {id : 2 , name : "itemP12"}
},
{
item : { id : 4 , name : "item4"},
itemP : null
},
]
}
]
当我尝试时,我总是有错误。有可能做到这一点吗?
更新
我尝试这样做:
console.log(array.map(pack =>
pack.values.map((item) => {
var test = JSON.stringify(item)
var set = new Set(test)
return Array.from(set).map((item)=> JSON.parse(item))
}
)
))
JSON 输入意外结束
我也尝试了一些过滤但它不起作用:
console.log(this.package.map(pack => pack.values.filter(
(value, index , array) => array.itemP.indexOf(value) === index
)))
解决方案
要达到预期的结果,请使用以下使用地图的选项
- 使用地图的循环数组
- 使用 nameArr 检查重复并分配空值
- 循环值数组并使用 indexOf 检查 nameArr 中的名称并分配 null
var array = [
{
key : { id : 1 , pack : "pack 1"},
values : [
{
item : { id : 1 , name : "item1"},
itemP : {id : 2 , name : "itemP12"}
},
{
item : { id : 4 , name : "item4"},
itemP : {id : 2 , name : "itemP12"}
}
]
}
]
console.log(array.map(v => {
let nameArr = []
v.values = v.values.map(val => {
if(nameArr.indexOf(val.itemP.name) !== -1){
val.itemP.name = null
}else{
nameArr.push(val.itemP.name)
}
return val
})
return v
}))
推荐阅读
- node.js - ExpressJs 在生产模式下发送堆栈
- ios - 全局变量不增加?- 即使在应用程序关闭后也想保存全局变量
- typescript - 用于添加对象属性的函数的 TypeScript JSDoc 注释
- python - 如何在 Gsheet 的第二行插入数据?
- java - 将 tictactoe 应用程序从控制台转换为 javafx
- react-native - 在 React-Navigation/Drawer 中排除某些屏幕
- twilio - twilio中转接电话时如何显示来电号码
- node.js - 坚持启动 Docker 容器
- javascript - 如何将 AppAuth 代码从 Redirect URI 发送回 Electron 程序?
- html - 部分高度不会根据其内容而改变