首页 > 解决方案 > 如何删除对象数组中的重复项?

问题描述

我有一个看起来像这样的数组:

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
  )))

标签: javascriptangular

解决方案


要达到预期的结果,请使用以下使用地图的选项

  1. 使用地图的循环数组
  2. 使用 nameArr 检查重复并分配空值
  3. 循环值数组并使用 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
}))


推荐阅读