2016-06-22 9 views
0

예 결과 : 트랜잭션 아이디 인 TXarray2.id 경우 예를 cf948340a40d3302303dfb3710cfce37bb1cd156dcb6c74561fdc71c0a8fc30b에 대한 DBarray1.User_Profile.TXHash 내부 사용자에 의한 지불과 일치하는 경우개체의 두 배열을 비교하고 필터

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); 

우리가 어떻게 확인 할 수 있습니다.

알고 싶습니다. 각각 TXarray2.id 누구가 지불 했습니까? 나는 약속을 지키려고 노력했지만 집에 도착했을 때 몇 가지 코드를 공유 하겠지만, 모든 사용자가 비동기로 할 수 있고 오늘 지갑에 누가 지불했는지 기록 할 수 있습니다. TXHash 내부를 검사하기 위해 array.find() 메서드로 시도했지만 실패했습니다. 아직 많은 프로토 타입 메서드를 완전히 파악하지 못했습니다 ...

누군가가 이미이 코드를 사용하여 공원에서 산책을하고 더 나은 해결책을 찾았기를 바랍니다. 이런 종류의 것들을 증명하기 위해서. 나는 로다시,지도 작성 등 무엇이든 대답을 받아 들일 것입니다. 타이 !!!

답변

2

당신은 TXArray2를 반복하고 transactionId는 대한 DBarray1에서 검색을한다. 내가 mapfilter 등의 기본 배열 방법과 일을 좋아한다, 그래서 나는 다음과 같은 것을 사용하는 것이이 예 result에서

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

이 모든 요소가 트랜잭션과 일치하는 사용자를 포함하는 배열입니다.

+0

감사합니다. @ 0xRm 내 의견으로 결과를 쿼리하는 가장 좋은 방법을 제공 해 주셔서 감사합니다. 솔직히 말해서 어떤 방법이 더 빠르고 더 나은지 전혀 알지 못하지만 짧고 이해하기 쉽기 때문에 제가갔습니다. 나는 indexOf를 사용하여 결국'depositAddress'에 전송 된 값을 얻었습니다. 모든 것이 잘 작동합니다. –

+0

오신 것을 환영합니다. 다행이 당신을 도왔습니다. – 0xRm

1

이미 거래 및 사용자 데이터가 모두있는 경우 다음과 같이 할 수 있습니까?

// 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}`); 
     } 
    } 
} 
+0

나는 $ {userId}에 대해'undefined'라는 결과를 얻으려고했다. 'of'와'.includes'라는 단서가 없기 때문에 코드에 대해 생각하는 방식을 단순화 할 수있는 유용한 메소드가 있습니다. 타이 너무 공유하고 돌보는 @robyn! –

+0

예,이 코드는 오류 검사를하지 않지만 (예 : 트랜잭션에 일치하는 사용자가없는 경우) 재미있는 ES6 연습이었습니다! – robyn

1

여기에 가장 좋은 방법은 반환 -1 항목이 배열에없는 경우 (당신이 콜백을 사용하려는 경우 또는 Array.findIndex) 사항 Array.indexOf을 사용하는 것입니다.

여기에 동기화 변종이 있습니다.

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); 
+0

@Roman Stetsyshin을 공유해 주셔서 감사합니다. 이 방법은 훌륭하고 실제로 작업을 멋지게 만듭니다. StackOverflow 커뮤니티, 윤리 및 권력을 정말로 감사하기 시작합니다. 정말 고마워 !!! –

관련 문제