首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用并行/多线程Hamsters.js Javascript库从数组中编辑对象属性

如何使用并行/多线程Hamsters.js Javascript库从数组中编辑对象属性
EN

Stack Overflow用户
提问于 2016-04-13 21:28:18
回答 1查看 295关注 0票数 0

在使用Hamster.js时,我们必须将参数数组定义为params = {" array ":my_array}

my_array由具有许多属性的元素组成,我需要更改属性x和y。

在传递给Hamster.js的函数中,我定义了:

代码语言:javascript
复制
function map_node_hamster() {
        params.array.forEach(function (d) {
            d.x = some_calculation_here;           
            d.y = other_calculation_here;
        }
}

但是在调用hamster.run()函数后,原始数组的元素保持不变。因为我需要性能,所以我想仓鼠可以改变我的数组所指向的值。实际上,我对Javascript以及它如何管理数组不太了解。

我像这样调用run函数:

代码语言:javascript
复制
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函数中更改数组元素?或者..。如何才是正确的方法来做这些改变?

由于向量节点很大,复制、排序等都会降低性能,而且可能比单线程/非并行版本更糟糕。

EN

回答 1

Stack Overflow用户

发布于 2016-04-13 23:48:55

答案似乎是在回调函数(output)中创建一个索引数组并更改节点。

尽管我的行为“网络的d3图形表示”真的不是我所期望的那样.也许在回答我的问题(如何用Hamsters.js在并行计算中从数组中更改对象)方面,代码实际上是正确的。这就是:

代码语言:javascript
复制
            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);

还有..。将函数更改为如下方式:

代码语言:javascript
复制
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]});
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36609886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档