在使用Hamster.js时,我们必须将参数数组定义为params = {" array ":my_array}
my_array由具有许多属性的元素组成,我需要更改属性x和y。
在传递给Hamster.js的函数中,我定义了:
function map_node_hamster() {
params.array.forEach(function (d) {
d.x = some_calculation_here;
d.y = other_calculation_here;
}
}但是在调用hamster.run()函数后,原始数组的元素保持不变。因为我需要性能,所以我想仓鼠可以改变我的数组所指向的值。实际上,我对Javascript以及它如何管理数组不太了解。
我像这样调用run函数:
console.log("Before hamster:");
console.log(network.nodes);
p = {'array': network.nodes, "w": w, "h":h};
hamsters.run(p, map_node_hamster, function(output){console.log(output); return output;}, hamsters.maxThreads, true);
console.log("After hamster:");
console.log(network.nodes);network.nodes的元素在hamsters.run()之后是完整的。
如何在run函数中更改数组元素?或者..。如何才是正确的方法来做这些改变?
由于向量节点很大,复制、排序等都会降低性能,而且可能比单线程/非并行版本更糟糕。
发布于 2016-04-13 23:48:55
答案似乎是在回调函数(output)中创建一个索引数组并更改节点。
尽管我的行为“网络的d3图形表示”真的不是我所期望的那样.也许在回答我的问题(如何用Hamsters.js在并行计算中从数组中更改对象)方面,代码实际上是正确的。这就是:
p = {'array': network.indexes,
"nodes": network.nodes,
"w": w,
"h": h};
hamsters.run(p, map_node_hamster, function (output) {
output.forEach(function (d) {
network.nodes[d.i].x = d.xy[0];
network.nodes[d.i].y = d.xy[1];
});
return output;
}, cores, true);还有..。将函数更改为如下方式:
function map_node_hamster() {
pfor (var i = 0; i < params.array.length; i++) {
var result;
var d = params.nodes[params.array[i]];
var d = params.nodes[params.array[i]];
result = {x: d.x calculation, y: d.y calculation};
rtn.data.push({"i": params.array[i], "xy": [result.x, result.y]});
}
}https://stackoverflow.com/questions/36609886
复制相似问题