首页 > 解决方案 > 从 js 数组中删除公共对象并创建新的 js 数组

问题描述

我在 JSON 数组下面有这个。在此,我想找到公共项目对象并将其添加到另一个列表中,然后将其从源列表中删除。具有 id 的项目对于两个对象是通用的。此外,该列表是动态的。

 [
      {
        "id": 1,
        "item": {
          "id": 1,
          "name": "itemA"
        }
      },
      {
        "id": 2,
        "item": {
          "id": 1,
          "name": "itemA"
        }
      },
      {
        "id": 3,
        "item": {
          "id": 2,
          "name": "itemB"
        }
      }
    ]

标签: javascriptjson

解决方案


  • Array.reduce在你的数组上,传递一个累加器。
  • 累加器跟踪找到的元素。
  • 检查累加器是否先前找到了迭代元素id,如果是,则将其推入重复项。
  • 否则将其推入arr.

const arr =  [
  {
    "id": 1,
    "item": {
      "id": 1,
      "name": "itemA"
    }
  },
  {
    "id": 2,
    "item": {
      "id": 1,
      "name": "itemA"
    }
  },
  {
    "id": 3,
    "item": {
      "id": 2,
      "name": "itemB"
    }
  }
]

const result = arr.reduce((acc, el, i) => {
  if (acc.found[el.item.id]) {
    acc.duplicates.push(el)
  } else {
    acc.source.push(el)
  }
  
  acc.found[el.item.id] = true
  
  if (i === arr.length - 1) 
   delete acc.found
  
  return acc
}, {
  source: [],
  duplicates: [],
  found: {}
})

console.log(result.source) // source with removed duplicates
console.log(result.duplicates) // array of duplicates


推荐阅读