Javascript json数组比较数组并删除重复项

Javascript json数组比较数组并删除重复项,javascript,arrays,json,Javascript,Arrays,Json,我有以下两个结构相似的数组,除了数组1中的附加键之外,当我获得数组2时,如果数组1中已经存在重复项,我想从数组2中删除重复项 例如,第二项为重复项 阵列1: 数组2:(唯一的区别是它不包含键\u goid) 我有下面的代码,如果数组完全相同,但不适用于我的情况,则删除重复的数组 function removeDuplicatesJson(myArr) { var props = Object.keys(myArr[0]) return myArr.filter((item, inde

我有以下两个结构相似的数组,除了数组
1
中的附加键之外,当我获得数组
2
时,如果数组
1
中已经存在重复项,我想从数组
2
中删除重复项

例如,第二项为重复项

阵列1: 数组2:(唯一的区别是它不包含键
\u goid
) 我有下面的代码,如果数组完全相同,但不适用于我的情况,则删除重复的数组

function removeDuplicatesJson(myArr) {
   var props = Object.keys(myArr[0])
   return myArr.filter((item, index, self) =>
    index === self.findIndex((t) => (
      props.every(prop => {
        return t[prop] === item[prop]
      })
    ))
    )
}

我不确定这是否是你想要的,但它可能会帮助你

一,。 更快但有限的选项(取决于数据量),只有在确定对象签名时,属性的顺序才很重要:

const removeDuplicates = (baseArray, toDedupe) => {
  const baseArrayFormatted = baseArray.map(({ _goid, ...restProps }) => JSON.stringify(restProps));
  return toDedupe
    .map(item => JSON.stringify(item))
    .filter((item) => !baseArrayFormatted.some(baseItem => baseItem === item))
    .map(item => JSON.parse(item));
}
二,。 速度较慢但更准确:

const removeDuplicates = (baseArray, toDedupe) => {
  const props = Object.keys(toDedupe[0]);
  return toDedupe
    .filter((item) => !baseArray.some(baseItem => props.every(prop => baseItem[prop] === item[prop])))
}

请记住,没有检查对象签名,也缺少验证的lof(如果它真的是一个对象,如果它是一个函数等,但我相信这不是这里的问题)。

下面的代码将按照您的要求执行:从
arr2
中删除
arr1
中已经存在的任何项目:

var arr1=[{
“发件人”:“1”,
“致”:“2”,
“文本”:“测试”,
“_goid”:“1234”
}, {
“发件人”:“3”,
“至”:“4”,
“文本”:“测试”,
“_goid”:“12345”
}, {
“发件人”:“5”,
“至”:“6”,
“文本”:“测试”,
“_goid”:“123456”
}]
var arr2=[{
“发件人”:“4”,
“至”:“8”,
“文本”:“测试”
},{
“发件人”:“3”,
“至”:“4”,
“文本”:“测试”
},{
“发件人”:“9”,
“至”:“10”,
“文本”:“测试”
}]
//创建要测试的值的平面数组:
var arr1_keys=arr1.map(item=>item.from+item.to);
// ["12", "34", "56"]
//过滤掉dup并创建一个无dup阵列
arr2=arr2.filter(item=>!arr1_键。包括(item.from+item.to))

console.log(arr2)
您期望的输出是什么?[{“from”:“4”,“to”:“8”,“text”:“test”},{“from”:“9”,“to”:“10”,“text”:“test”}]当与第一个数组进行检查时,它应该从第二个数组中删除重复节点,因为它已经存在。请参阅此处了解非常类似的问题和答案:这使用的是同一个数组。我有两个不同的阵列,如何实现相同的效果?
const removeDuplicates = (baseArray, toDedupe) => {
  const baseArrayFormatted = baseArray.map(({ _goid, ...restProps }) => JSON.stringify(restProps));
  return toDedupe
    .map(item => JSON.stringify(item))
    .filter((item) => !baseArrayFormatted.some(baseItem => baseItem === item))
    .map(item => JSON.parse(item));
}
const removeDuplicates = (baseArray, toDedupe) => {
  const props = Object.keys(toDedupe[0]);
  return toDedupe
    .filter((item) => !baseArray.some(baseItem => props.every(prop => baseItem[prop] === item[prop])))
}