Javascript 比较两个对象数组并筛选结果
例如:Javascript 比较两个对象数组并筛选结果,javascript,node.js,validation,if-statement,foreach,Javascript,Node.js,Validation,If Statement,Foreach,例如: const depositAddress = '2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG'; DBarray1.forEach( (tx) => { console.log(tx); }) TXarray2.forEach( (sim) => { console.log(sim); }); DBarray1 = [ { "_id": "575e2b7875a402111900ba8f", "use
const depositAddress = '2NBXPR5PRtW8xBRuDnWXBDXqHYpDPupWnhG';
DBarray1.forEach( (tx) => {
console.log(tx);
})
TXarray2.forEach( (sim) => {
console.log(sim);
});
DBarray1 = [
{
"_id": "575e2b7875a402111900ba8f",
"username": "aleluia@gmail.com",
"playerWallet": "2NFt8YfydBU5JD9U8Xq2ucbfUp2sP7BjUrh",
"User_Profile": {
"TXHash": [
"7fbe28f75412f19dfd123a08ce03c33c302aa13d1e68d38ab8cb4c7418777f8e"
]
}
},
{
"_id": "575e2946b909906a17ea65b9",
"username": "super@user.com",
"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);
我们如何检查交易id是否与用户在DBarray1.user_Profile.TXHash
中的付款相匹配,例如cf948340a40d330303dfb370cfce37bb1cd156dcb6c74561fdc71c0a8fc30b
我想知道forEachTXarray2.id
是谁付款的。我试着用承诺来做到这一点,回家后我会分享一些代码,但我相信所有用户都可以通过async一个接一个地完成,并将今天付款的用户记录到这个钱包中。我尝试使用array.find()方法检查TXHash内部,但失败了,我还没有完全掌握许多原型方法
希望有人已经认为这对他来说是在公园里散步,并找到了一个更好的解决方案来验证这种东西。我会接受任何答案,即使是洛达斯,马平,任何东西。泰 如果您已经拥有所有事务和用户数据,您可以这样做吗
// 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}`);
}
}
}
如果您已经拥有所有的事务和用户数据,您可以这样做吗
// 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}`);
}
}
}
这里最好的方法是使用Array.indexOf(如果要使用回调,则使用Array.findIndex),如果条目不在数组中,它将返回-1 以下是同步变量: 支付的风险价值=[]
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);
TXArray2.forEach(函数(事务){
对于(变量i=0;i-1){
付费推送({
用户:DBArray1[i],
交易:交易
});
打破
}
}
});
控制台日志(付费);
这里最好的方法是使用Array.indexOf(如果要使用回调函数,则使用Array.findIndex),如果条目不在数组中,则返回-1
以下是同步变量:
支付的风险价值=[]
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);
TXArray2.forEach(函数(事务){
对于(变量i=0;i-1){
付费推送({
用户:DBArray1[i],
交易:交易
});
打破
}
}
});
控制台日志(付费);
您迭代TXArray2并在DBarray1中查找transactionId。
我喜欢使用本机数组方法,如map
和filter
,因此我会使用以下方法:
const result = TXarray2.map(tx => ({
transaction: tx,
user: DBarray1.filter(user => user.User_Profile.TXHash.indexOf(tx.id) > -1)[0]
}));
在本例中,
result
是一个数组,其中每个元素都包含一个事务和匹配的用户。您迭代TXArray2,并在DBarray1中查找事务ID。
我喜欢使用本机数组方法,如map
和filter
,因此我会使用以下方法:
const result = TXarray2.map(tx => ({
transaction: tx,
user: DBarray1.filter(user => user.User_Profile.TXHash.indexOf(tx.id) > -1)[0]
}));
在本例中,
result
是一个数组,其中每个元素都包含一个事务和匹配的用户。感谢您共享@Roman Stetsyshin。这种方法很好,而且确实很好地完成了任务。真正开始欣赏社区、道德和权力。太多了!!!感谢您分享@Roman Stetsyshin。这种方法很好,而且确实很好地完成了任务。真正开始欣赏社区、道德和权力。太多了!!!我试图让它为${userId}工作,但未定义。对和.includes没有任何线索,这些方法非常有用,可以简化我思考代码的方式。太感谢@robyn的分享和关怀了!是的,这段代码不做任何错误检查(例如,如果事务没有匹配的用户),但这是一个有趣的ES6练习!我试图让它为${userId}工作,但未定义。对和.includes没有任何线索,这些方法非常有用,可以简化我思考代码的方式。太感谢@robyn的分享和关怀了!是的,这段代码不做任何错误检查(例如,如果事务没有匹配的用户),但这是一个有趣的ES6练习!感谢@0xRm在我看来提供了查询结果的最佳方法,老实说,我不知道哪种方法更快更好,但我选择了这种方法,因为它很短而且很有意义。最后,我使用indexOf来获取发送到depositAddress
的值,一切都很好。感谢@0xRm提供了查询结果的最佳方法。在我看来,老实说,我不知道哪种方法更快更好,但我选择了这种方法,因为它很短,而且很有意义。最后,我使用indexOf来获取发送到depositAddress
的值,一切都很好。