Octavian Lojnita
Octavian Lojnita

Reputation: 361

Compare two arrays of objects and filter results

Example:

const depositAddress = '2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG';

DBarray1.forEach( (tx) => {
  console.log(tx);
})

TXarray2.forEach( (sim) => {
  console.log(sim);
});

DBarray1 = [
    {
       "_id": "575e2b7875a402111900ba8f",
       "username": "[email protected]",
       "playerWallet": "2NFt8YfydBU5JD9U8Xq2ucbfUp2sP7BjUrh",
       "User_Profile": {
          "TXHash": [
           "7fbe28f75412f19dfd123a08ce03c33c302aa13d1e68d38ab8cb4c7418777f8e"
          ]
       }
    },
    {
       "_id": "575e2946b909906a17ea65b9",
       "username": "[email protected]",
       "playerWallet": "2MzppxEX7xMidjhoJGczFDYsHk5TQwFkjS3",
       "User_Profile": {
          "TXHash": [
             "cf948340a40d3302303dfb3710cfce37bb1cd156dcb6c74561fdc71c0a8fc30b",
             "6219def49d2e8284a6031f4c7e05e21adf756d38904e6359bd7844ae14c75a50"
          ]
       }
    }
 ] // end console.log(DBarray1);


TXarray2 = [
    {
       "id": "cf948340a40d3302303dfb3710cfce37bb1cd156dcb6c74561fdc71c0a8fc30b",
       "normalizedHash": "f62af1a61c7eb569c1a171ad23c70bc218bd7244c9c5c92cf7d98638314fbbc5",
       "date": "2016-06-21T04:11:18.541Z",
       "fee": 6280,
       "inputs": [
          {
             "previousHash": "2660fb761354671912b0cea6427e9ee91a98a507e5f1408865a6058b566b508c",
             "previousOutputIndex": 0
          },
          {
             "previousHash": "ce3ef138c11ea4d1766cce52ccf5f1e91790bc03b56561b0eb669041bae4e1a3",
             "previousOutputIndex": 0
          }
       ],
       "outputs": [
          {
             "vout": 0,
             "account": "2N92kApgroS6CTVuTajtjWtpcAZpUiyQoDT",
             "value": 861003
          },
          {
             "vout": 1,
             "account": "2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG",
             "value": 3100000,
             "isMine": true,
             "chain": 0,
             "chainIndex": 0
          }
       ],
       "entries": [
          {
             "account": "2MzppxEX7xMidjhoJGczFDYsHk5TQwFkjS3",
             "value": -3967283
          },
          {
             "account": "2N92kApgroS6CTVuTajtjWtpcAZpUiyQoDT",
             "value": 861003
          },
          {
             "account": "2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG",
             "value": 3100000
          }
       ],
       "confirmations": 70,
       "pending": false,
       "instant": true,
       "instantId": "5768be65427689eb06e597559c7e6cf0",
       "blockhash": "00000000002d9fb51c7c3c1607fe062eff686aa6be657a59fee6c3044963897d",
       "height": 872152
    },
    {
       "id": "6219def49d2e8284a6031f4c7e05e21adf756d38904e6359bd7844ae14c75a50",
       "normalizedHash": "179a4466fdfc5470e99e43aa177d43aa4f09e3a06760fd5bebffdda080d4407f",
       "date": "2016-06-21T04:13:23.650Z",
       "fee": 9096,
       "inputs": [
          {
             "previousHash": "5d2879a79ea3d0dcb50049ef9ca46ef7e8d82caf2073a299a6cd0332add404c8",
             "previousOutputIndex": 1
          },
          {
             "previousHash": "d75288e69a3fc2edd534ddcd845af6a280a27af58013ae82828c8a8f813829c1",
             "previousOutputIndex": 0
          },
          {
             "previousHash": "eea4f9b274708b60c1b030203543a155857bc54aa11055ada04aceee706f96b9",
             "previousOutputIndex": 0
          }
       ],
       "outputs": [
          {
             "vout": 0,
             "account": "2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG",
             "value": 2000000,
             "isMine": true,
             "chain": 0,
             "chainIndex": 0
          },
          {
             "vout": 1,
             "account": "2MzFTm5jnCDiAapjNnyVgZAJrXMKfQ74esV",
             "value": 9859
          }
       ],
       "entries": [
          {
             "account": "2MzcwVFKF274bMNT5tNEDY7Ua7bAgvFUdu9",
             "value": -35316
          },
          {
             "account": "2MzFTm5jnCDiAapjNnyVgZAJrXMKfQ74esV",
             "value": 9859
          },
          {
             "account": "2MzppxEX7xMidjhoJGczFDYsHk5TQwFkjS3",
             "value": -1983639
          },
          {
             "account": "2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG",
             "value": 2000000
          }
       ],
       "confirmations": 70,
       "pending": false,
       "instant": true,
       "instantId": "5768bee2b5bdf3f406e7db035aef016a",
       "blockhash": "00000000002d9fb51c7c3c1607fe062eff686aa6be657a59fee6c3044963897d",
       "height": 872152
    },
    {
       "id": "7fbe28f75412f19dfd123a08ce03c33c302aa13d1e68d38ab8cb4c7418777f8e",
       "normalizedHash": "b4f1974dccde5ea9dfb0abcd7d4a6f3f14995d9dd422aa7d2a9078229ff18ff4",
       "date": "2016-06-21T03:39:25.034Z",
       "fee": 3465,
       "inputs": [
          {
             "previousHash": "97fbb6ed8646f7ce9ed10a4230a70348151d5b6b208ad068e3a1a3fddae2dc0e",
             "previousOutputIndex": 2
          }
       ],
       "outputs": [
          {
             "vout": 0,
             "account": "2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG",
             "value": 111200000,
             "isMine": true,
             "chain": 0,
             "chainIndex": 0
          },
          {
             "vout": 1,
             "account": "2NFJnLrhsCDfG3ooQvGC169gnzBabtRgV2y",
             "value": 244246993
          }
       ],
       "entries": [
          {
             "account": "2NCGUnwpNgaJbhMZKLJcBrWvZhWnai5PjVC",
             "value": -355450458
          },
          {
             "account": "2NFJnLrhsCDfG3ooQvGC169gnzBabtRgV2y",
             "value": 244246993
          },
          {
             "account": "2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG",
             "value": 111200000
          }
       ],
       "confirmations": 77,
       "pending": false,
       "instant": false,
       "blockhash": "0000000000509dbc80cc3d86cdb10ce8e87ab7867c6775a9b00ca904fbe70da7",
       "height": 872145
    }
 ]// end console.log(TXarray2);

How can we check if TXarray2.id which is the transactions id, if it matches a payment made by the user inside DBarray1.User_Profile.TXHash for examplecf948340a40d3302303dfb3710cfce37bb1cd156dcb6c74561fdc71c0a8fc30b .

I want to know forEach TXarray2.id who made the payment . I tried to do this with promises and i will share some code when i get home but i'm sure it can be done with async for all users one by one and log who made a payment today to this wallet. I tried with array.find() method to check inside TXHash but failed, i don't fully grasp many prototype methods yet...

Hopefully someone already thinks this a walk on the park for him and found a better solution to validate this kind of stuff. I will accept any answer even with lodash, maping, anything. TY !!!

Upvotes: 0

Views: 530

Answers (3)

0xRm
0xRm

Reputation: 1267

You iterate TXArray2 and do a lookup in DBarray1 for the transactionId. I like to work with native array methods like map and filter, so I would use something like the following:

const result = TXarray2.map(tx => ({
  transaction: tx,
  user: DBarray1.filter(user => user.User_Profile.TXHash.indexOf(tx.id) > -1)[0]
}));

In this example result is an array where every element contains a transaction and the matching user.

Upvotes: 2

Roman Stetsyshin
Roman Stetsyshin

Reputation: 186

The best way here is to use Array.indexOf (or Array.findIndex if you want to use callbacks) which returns -1 if an entry is not in an array.

Here's the sync variant:

var paid = [];

TXArray2.forEach(function(transaction){

  for(var i = 0; i < DBArray1.length; ++i){
    if(DBArray1[i].User_Profile.TXHash.indexOf(transaction.id) > -1){
      paid.push({
        user : DBArray1[i],
        transaction : transaction
        });
      break;  
    }
  }
});
console.log(paid);

Upvotes: 1

robyn
robyn

Reputation: 31

If you already have all of the transaction and user data, could you do something like this?

// for each transaction in TXarray2
for (let { 'id': transactionId } of TXarray2) {

    // check each entry in DBarray1
    for (let { '_id': userId, 'User_Profile': { 'TXHash': transactions } } of DBarray1) {

        if (transactions.includes(transactionId)) {
            console.log(`${transactionId} was made by ${userId}`);
        }
    }
}

Upvotes: 1

Related Questions