разница в массиве javascript - PullRequest
0 голосов
/ 22 апреля 2020

Я знаю, что это будет так просто, но я пробую это в течение двух дней, поэтому я, наконец, решил обратиться за помощью к вам, ребята ... Я пробовал , вероятно, тот же вопрос, что и мой , но это не давая мне ответа.

хорошо, вот эти два массива

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"}]

так быстро помочь будет очень ценным.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

В чем проблема ???

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 ) )
0 голосов
/ 22 апреля 2020

Так что с вашим кодом вам нужно посмотреть на другой объект и посмотреть, есть ли у него какие-либо ключи, которые соответствуют. Если оно совпадает, вам нужно проверить, соответствует ли сообщение. Таким образом, вы можете сделать поиск объекта, который имеет список идентификаторов. Вы можете чем l oop над своим вторым массивом и посмотреть, если они идут.

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, оно не будет поймано.

...