javascript中的数组差异

Posted

技术标签:

【中文标题】javascript中的数组差异【英文标题】:array difference in javascript 【发布时间】:2020-08-05 18:41:22 【问题描述】:

我知道这会很简单,但我尝试了两天,所以我最终决定向你们寻求帮助...... 我试过这个probably the same question as mine,但它没有给我答案。

好的,这是两个数组

a = [toNumber: "123", message: "Hi Deep ", toNumber: "321", message: "Test1"]
b = [toNumber: "321", message: "Test2", toNumber: "123", message: "Hi Deep "]

我想要的是

diff = [toNumber: "321", message: "Test2"]

如此快速的帮助将非常受欢迎。

【问题讨论】:

toNumber 是“key/id”吗? 您的对象没有.value.display 属性。 数组值中没有 toNumber... 它们是如何联系起来的,这就是问题所在。有些东西必须是一样的。就像 toNumber 必须相同还是消息可以相同?因为你的例子会有2个不同 如果您正在寻找 2 个对象数组之间的对称差异,那么您的 diff 结果是错误的。请说明您在数学上寻找什么 【参考方案1】:

因此,您需要使用您的代码查看另一个对象,看看它是否有任何匹配的键。如果匹配,则需要查看消息是否匹配。因此,您可以创建一个具有 id 列表的查找对象。你可以遍历你的第二个数组,看看他们是否行进。

var a = [
  toNumber: "123", message: "Hi Deep ",
  toNumber: "321", message: "Test1"
]
var b = [
  toNumber: "321", message: "Test2",
  toNumber: "123", message: "Hi Deep "
]

// create the lookup from the first array
var lookup = a.reduce( function (lookUpObj, entryA) 
  // set the object property with the toNumber property
  lookUpObj[entryA.toNumber] = entryA.message
  return lookUpObj
, )

// Now loop over the array and look for the differences
var diff = b.reduce(function (arr, entryB) 
  // grab the entry from the lookup object we created
  var orginalMessage = lookup[entryB.toNumber]
  // if we do not have it listed OR the message is different
  // add it to the list as changed.
  if (!orginalMessage || orginalMessage !== entryB.message) 
    arr.push(entryB)
  
  return arr
, [])

console.log(diff)

现在这将匹配从 a 到 b 的任何差异。如果在 B 中删除了不在 A 中的任何内容,则不会被捕获。

【讨论】:

让我在我的代码中试试这个,非常感谢@epascarello。【参考方案2】:

问题出在哪里???

const a = 
    [  toNumber: "123", message: "Hi Deep "  
    ,  toNumber: "321", message: "Test1"     
    ]
const b = 
    [  toNumber: "321", message: "Test2"     
    ,  toNumber: "123", message: "Hi Deep "  
    ] 

const diff = b.filter(eB=>!a.some(eA=>( eA.toNumber===eB.toNumber
                                      && eA.message===eB.message )))

document.write( JSON.stringify( diff ) )

【讨论】:

以上是关于javascript中的数组差异的主要内容,如果未能解决你的问题,请参考以下文章

javascript中的数组差异

JavaScrip命名规则

如何从Javascript中的数组中获取最小的差异值

比较两个对象数组并获取 Javascript 中的差异

javascript中的数组差异

好程序员分享JavaScrip数组去重操作实例小结