【问题标题】:BitGO - Get MIN value from Array of ObjectsBitGO - 从对象数组中获取最小值
【发布时间】:2023-03-31 01:25:02
【问题描述】:

Bitgo 将所有交易作为对象提供,并且始终保存在一个大数组中。在嵌套的 .entries 中,我们看到第一个 TX 对象有两个负值 -312084680 和 -4254539,我只需要其中的最小值。我的代码可以工作并记录所有交易,但只有当钱只从一个地址发送时它才是正确的。如果存在两个负值,我会记录 3 个事务而不是 2 个。

var allTxs = [
   {
      "id": "e5216ffaaa2a37bcc14380db07f06c85a65bcdc4e1fcab2bd5523f0b8a11bc15",
      "normalizedHash": "0709c99097386a3c0130f3d6b002acf6a4e37978406704268fc9d308eec4c2b8",
      "date": "2016-04-17T20:07:03.700Z",
      "fee": 7440,
      "inputs": [
         {
            "previousHash": "6d043a06ade4eac5315967c463fcd65deb4ed9bff23ee3e73ff82c9cf72360e9",
            "previousOutputIndex": 1
         },
         {
            "previousHash": "b6e566cbee0f23bee7b321eda7f6159a165101e77e7f1e75bd9eb6e31540b391",
            "previousOutputIndex": 0
         }
      ],
      "outputs": [
         {
            "vout": 0,
            "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
            "value": 312500000,
            "isMine": true,
            "chain": 0,
            "chainIndex": 0
         },
         {
            "vout": 1,
            "account": "mmRuajWq2xPYQw4gjXz8pQ2fUfJTF7fvYe",
            "value": 3831779
         }
      ],
      "entries": [
         {
            "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
            "value": 312500000
         },
         {
            "account": "muEePZzkRWX3RnLWHxTx6r8T3MMruTgMgg",
            "value": -312084680
         },
         {
            "account": "mmRuajWq2xPYQw4gjXz8pQ2fUfJTF7fvYe",
            "value": 3831779
         },
         {
            "account": "n47gD5D3XfBG41tWKX4YHNc9gboyWU9yJg",
            "value": -4254539
         }
      ],
      "confirmations": 677,
      "pending": false,
      "instant": false,
      "blockhash": "000000000000020f526fe18af7536fa4e816694c4dec865e0d87d6b722b643d9",
      "height": 786821
   },
   {
      "id": "71fb53e7d70ce27dced2eb327ac544b8f046e66480342ba81533046f3267e6f4",
      "normalizedHash": "80116b194b58b494d85b2a831815a978ec6f0fe617cfd020880ff1ad76b2bacc",
      "date": "2016-04-17T20:06:56.474Z",
      "fee": 4480,
      "inputs": [
         {
            "previousHash": "1f4145b615f5d067160184a3e9660396f826614c3fcae9abdcb7192c615b843a",
            "previousOutputIndex": 0
         }
      ],
      "outputs": [
         {
            "vout": 0,
            "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
            "value": 625000000,
            "isMine": true,
            "chain": 0,
            "chainIndex": 0
         },
         {
            "vout": 1,
            "account": "mpntSJWk116JF58VRDxeMMwr4gC7afVEKt",
            "value": 390110612
         }
      ],
      "entries": [
         {
            "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
            "value": 625000000
         },
         {
            "account": "mqRsJr8szT5XTSLm3CU7i9ePa7kWnC2VWs",
            "value": -1015115092
         },
         {
            "account": "mpntSJWk116JF58VRDxeMMwr4gC7afVEKt",
            "value": 390110612
         }
      ],
      "confirmations": 689,
      "pending": false,
      "instant": false,
      "blockhash": "000000000000020f526fe18af7536fa4e816694c4dec865e0d87d6b722b643d9",
      "height": 786821
   }
];


  for (var i=0; i<allTxs.length; i++) {
    if(allTxs[i].confirmations >= 7 ) {
      var tx = allTxs[i];
      var value = 0;
      for (var entriesIndex = 0; entriesIndex < tx.entries.length; ++entriesIndex) {
        if (tx.entries[entriesIndex].account === wallet.id()) {
          value += tx.entries[entriesIndex].value;
        }
      }
      for ( var receivedFrom = 0; receivedFrom < tx.entries.length; ++receivedFrom ){
          if (tx.entries[receivedFrom].value < 0){
                var verb = (value > 0) ? 'Received' : 'Sent';
                  console.log(tx.entries[receivedFrom].account + ' : ' + verb + ' ' + (value / 1e8).toFixed(8));

        }
      }
    }
  }

这就是神奇发生的地方:

if (tx.entries[receivedFrom].value < 0){
                  // both values are less than 0

希望有人觉得这很容易并伸出援助之手!

【问题讨论】:

    标签: javascript node.js if-statement foreach min


    【解决方案1】:

    我进行了一些更改以提高代码的可读性,更改变量的名称,并使用 forEach 代替传统的 for 循环。还创建了一个名为 minEntry 的对象,它存储具有最低值的条目。希望对你有帮助

       var allTransactions = [
       {
          "id": "e5216ffaaa2a37bcc14380db07f06c85a65bcdc4e1fcab2bd5523f0b8a11bc15",
          "normalizedHash": "0709c99097386a3c0130f3d6b002acf6a4e37978406704268fc9d308eec4c2b8",
          "date": "2016-04-17T20:07:03.700Z",
          "fee": 7440,
          "inputs": [
             {
                "previousHash": "6d043a06ade4eac5315967c463fcd65deb4ed9bff23ee3e73ff82c9cf72360e9",
                "previousOutputIndex": 1
             },
             {
                "previousHash": "b6e566cbee0f23bee7b321eda7f6159a165101e77e7f1e75bd9eb6e31540b391",
                "previousOutputIndex": 0
             }
          ],
          "outputs": [
             {
                "vout": 0,
                "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
                "value": 312500000,
                "isMine": true,
                "chain": 0,
                "chainIndex": 0
             },
             {
                "vout": 1,
                "account": "mmRuajWq2xPYQw4gjXz8pQ2fUfJTF7fvYe",
                "value": 3831779
             }
          ],
          "entries": [
             {
                "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
                "value": 312500000
             },
             {
                "account": "muEePZzkRWX3RnLWHxTx6r8T3MMruTgMgg",
                "value": -312084680
             },
             {
                "account": "mmRuajWq2xPYQw4gjXz8pQ2fUfJTF7fvYe",
                "value": 3831779
             },
             {
                "account": "n47gD5D3XfBG41tWKX4YHNc9gboyWU9yJg",
                "value": -4254539
             }
          ],
          "confirmations": 677,
          "pending": false,
          "instant": false,
          "blockhash": "000000000000020f526fe18af7536fa4e816694c4dec865e0d87d6b722b643d9",
          "height": 786821
       },
       {
          "id": "71fb53e7d70ce27dced2eb327ac544b8f046e66480342ba81533046f3267e6f4",
          "normalizedHash": "80116b194b58b494d85b2a831815a978ec6f0fe617cfd020880ff1ad76b2bacc",
          "date": "2016-04-17T20:06:56.474Z",
          "fee": 4480,
          "inputs": [
             {
                "previousHash": "1f4145b615f5d067160184a3e9660396f826614c3fcae9abdcb7192c615b843a",
                "previousOutputIndex": 0
             }
          ],
          "outputs": [
             {
                "vout": 0,
                "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
                "value": 625000000,
                "isMine": true,
                "chain": 0,
                "chainIndex": 0
             },
             {
                "vout": 1,
                "account": "mpntSJWk116JF58VRDxeMMwr4gC7afVEKt",
                "value": 390110612
             }
          ],
          "entries": [
             {
                "account": "2N5Jr87jhTuAHab37VKWNPhoH1WUEHkVg1Q",
                "value": 625000000
             },
             {
                "account": "mqRsJr8szT5XTSLm3CU7i9ePa7kWnC2VWs",
                "value": -1015115092
             },
             {
                "account": "mpntSJWk116JF58VRDxeMMwr4gC7afVEKt",
                "value": 390110612
             }
          ],
          "confirmations": 689,
          "pending": false,
          "instant": false,
          "blockhash": "000000000000020f526fe18af7536fa4e816694c4dec865e0d87d6b722b643d9",
          "height": 786821
       }
    ];
    
      allTransactions.forEach(function (transaction){    
          var value = 0;
          var minEntry = { value : 0 };
          transaction.entries.forEach(function (entry) {
             //if (entry.account === wallet.id()) {
              value += entry.value;
             //}
          });
          var verb = (value > 0) ? 'Received' : 'Sent';
          transaction.entries.forEach(function (entry) {
              if (entry.value < minEntry.value){
                minEntry = entry;
             }
          });
          if(minEntry.value){
            console.log(minEntry.account + ' : ' + verb + ' ' + (value / 1e8).toFixed(8));
          }
      });
    

    【讨论】:

    • 抱歉,试试 transaction.entries.forEach
    • 将 minValue 更改为 minEntry,得到 minValue is undefined 。之后没有错误,但是 console.log(minEntry.account + ' : ' + verb + ' ' + (value / 1e8).toFixed(8));不会被调用。
    • 我编辑了代码,再试一次。在您提供的代码中,对象钱包不存在。
    • 没问题 :) 如果您有任何其他问题,请留在 cmets 或给我发私信,很乐意提供帮助
    猜你喜欢
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多