Node.js 将数据排序到对象中适当的键中

Node.js 将数据排序到对象中适当的键中,node.js,rpc,blockchain,ethereum,Node.js,Rpc,Blockchain,Ethereum,我正在尝试循环和排序大量数据(整个以太坊区块链lol) 我正在尝试为每个地址创建所有事务的记录 显然,这是一个非常密集的过程,我不知道如何使它比我现有的更有效(这不是那么有效) 它开始很快,但我认为现在它已经慢了,因为在txs对象中查找地址 非常感谢任何帮助意见/帮助 var txs={}; var i=0; //在块上循环 (函数循环(){ setTimeout(函数(){ //获取当前块 var block=web3.eth.getBlock(i,true,(error,block)=>{

我正在尝试循环和排序大量数据(整个以太坊区块链lol)

我正在尝试为每个地址创建所有事务的记录

显然,这是一个非常密集的过程,我不知道如何使它比我现有的更有效(这不是那么有效)

它开始很快,但我认为现在它已经慢了,因为在
txs
对象中查找地址

非常感谢任何帮助意见/帮助

var txs={};
var i=0;
//在块上循环
(函数循环(){
setTimeout(函数(){
//获取当前块
var block=web3.eth.getBlock(i,true,(error,block)=>{
//调试器;
//在块中循环事务
对于(var j=0;j
我认为您的代码中有一个错误,位于“else if”,似乎您应该使用
txs[block.transactions[j]
属性,而不是
txs[block.transactions[j].to]
。如果您只是想实现递归模式,那么可以使用函数或方法。如果使用node.js v6+,则可以使用a而不是对象。

谢谢,我在else If中错过了这一点。它无声地出错了:P我会研究一下那些东西,谢谢你,那没有多大的效率。在这个例子中,我只是使用ES6,但这不会提高性能,但应该更容易维护。
var txs = {};

var i = 0;
// Loop over blocks
(function loop () {
setTimeout(function () {
  // Get current block
  var block = web3.eth.getBlock(i, true, (error, block) => {
    // debugger;
    // Loop over transactions in block
    for(var j = 0; j < block.transactions.length; j++) {
      // debugger;
      if(txs[block.transactions[j].to]) {

        txs[block.transactions[j].to].transactions.push(block.transactions[j]);
      } else if (txs[block.transactions[j].to]) {
        txs[block.transactions[j].from].transactions.push(block.transactions[j]);
      } else {
        txs[block.transactions[j].to] = {
          transactions: [block.transactions[j]]
        }
        txs[block.transactions[j].from] = {
          transactions: [block.transactions[j]]
        }
      }
    }
  });
  i++
  if (i < highestBlock) {
    loop();
  }
 }, 50);
})();