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中的数组差异的主要内容,如果未能解决你的问题,请参考以下文章