将数据排序到对象中的适当键中
Sorting data into appropriate key in an object
我正在尝试对大量数据进行循环和排序(整个以太坊区块链哈哈)
我正在尝试为每个地址创建所有交易的记录。
显然这是一个非常密集的过程,我不确定如何使它比我现有的更高效(效率不高)
开始时速度很快,但我想现在速度变慢了,因为要查找 txs
对象中的地址。
非常感谢任何帮助意见/帮助。
https://giphy.com/gifs/3o6fJ7KWqxESY9okk8
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);
})();
我认为您的代码在 "else-if" 处有错误,看来您应该使用 txs[block.transactions[j].from]
属性 而不是 txs[block.transactions[j].to]
。如果你只是想完成一个递归模式,你可以使用 setImmediate
function or the process.nextTick
method. If you use node.js v6+ you could use a Map
而不是对象。
我正在尝试对大量数据进行循环和排序(整个以太坊区块链哈哈)
我正在尝试为每个地址创建所有交易的记录。
显然这是一个非常密集的过程,我不确定如何使它比我现有的更高效(效率不高)
开始时速度很快,但我想现在速度变慢了,因为要查找 txs
对象中的地址。
非常感谢任何帮助意见/帮助。
https://giphy.com/gifs/3o6fJ7KWqxESY9okk8
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);
})();
我认为您的代码在 "else-if" 处有错误,看来您应该使用 txs[block.transactions[j].from]
属性 而不是 txs[block.transactions[j].to]
。如果你只是想完成一个递归模式,你可以使用 setImmediate
function or the process.nextTick
method. If you use node.js v6+ you could use a Map
而不是对象。