【问题标题】:array difference in javascriptjavascript中的数组差异
【发布时间】: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 结果是错误的。请说明您在数学上寻找什么

标签: javascript jquery arrays multidimensional-array


【解决方案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 ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多