我正在为node.js编写C ++插件。我想处理大量数据并将其捆绑到一个数组数组中,以从C ++流程传递回js。我了解到NAN提供了一个称为TypedArrayContents的v8帮助程序类,它使我可以通过指针直接访问v8 Float32Array。
v8::Local<Float32Array> tempHeatmap = v8::Float32Array::New(
v8::ArrayBuffer::New(isolate, 4 * DIMENSIONS), 0, DIMENSIONS);
Nan::TypedArrayContents<float> dest(tempHeatmap);
for (int i = 0; i < heatmapCollection.size(); i++) {
v8::Local<Array> sensorDataArray =
Local<Array>::Cast(parentData->Get(i + 1));
for (int a = 0; a < nodeCount; a++) {
sensorDataVec[a] = sensorDataArray->Get(a)->NumberValue();
}
for (int j = 0; j < DIMENSIONS; j++) {
float num = 0.0, denom = 0.0;
for (int k = 0; k < nodeCount; k++) {
if (heatmapGrid[j][k] == 0.0) {
}
else {
num += float(sensorDataVec[k]) / float(heatmapGrid[j][k]);
denom += 1 / float(heatmapGrid[j][k]);
}
}
(*dest)[j] = num / denom;
}
returnHeatmapCollection->Set(i, tempHeatmap);
}
returnHeatmapCollection是一个v8数组,用于存储Float32Array作为元素。我可以从js端访问它。
但是,returnHeatmapCollection内部的每个元素默认为 last 元素的后处理结果。换句话说,如果我生成10个tempHeatmap,则通过-> Set()将第10个tempHeatmap加载到returnHeatmapArray中的每个元素中。
为什么会这样?与默认设置为 first 元素相比,它的意义无穷。但是最后一个元素会覆盖所有先前的元素,这一事实表明,每次我使用-> Set时,都会修改每个先前的元素。怎么会这样呢?
答案 0 :(得分:0)
您有一个.lineLimit(X)
(在Float32Array
循环外部声明),您将其设置为for
的每个索引。您需要为每个索引创建一个新的returnHeatmapCollection
。