2014-04-18 161 views
0

我正在构建基于V8的本机NodeJS C++模块。我得到了在环下面的代码:V8,将文本追加到数组的最后一个元素

Local<Array> nodes = Array::New(); 

/********** INSIDE THE LOOP ************/ 
Local<Object> node_obj = Object::New(); 
node_obj->Set(data_symbol, String::New(input.substr(openPos + (lastTag > 1 ? 3 : 2), pos - openPos - (lastTag > 1 ? 3 : 2) - 1).c_str())); 
node_obj->Set(tag_symbol, Integer::New(lastTag)); 
nodes->Set(id, node_obj); 

而且我用填充对象的数组,所以输出(在JS)看起来就像这样:

[ 
    {tag: 2, data: "asdsadsadasfddgdfgdfg"}, 
    {tag: 1, data: "afg235235232fgdfg"} 
] 

我的问题是我怎么能将字符串追加到数组最后一个对象的data_symbol中?

的完整代码可以在这里找到:

让我们这样的结构,例如:

struct Node { 
    short tag; 
    std::string data; 

    Node(const std::string& input, short tagId) : tag(tagId), data(input) {} 
}; 

std::vector<Node> elems; 

我的问题是如何的什么,我试图做http://pastebin.com/tCgWCxyA

例我能做

elems.back().data.append("SomeString"); 

在V8中?

+0

追加怎么样?你能给个例子吗? – mscdex

+0

@mscdex我编辑我的问题 – Deepsy

回答

1

您可以使用String::Concat(Handle<String> left, Handle<String>right)像这样:

HandleScope scope; 

Local<Object> lastnode = nodes->Get(nodes->Length() - 1)->ToObject(); 
Local<String> lastdatastr = lastnode->Get(data_symbol)->ToString(); 
lastnode->Set(data_symbol, 
       String::Concat(lastdatastr, String::New(" I'm appended!"))); 
+0

事情是,循环完成后,我需要追加它,我不知道datastr的值。像'elems.back()。data.append(“SomeString”);' – Deepsy

+1

我更新了代码。 – mscdex

+0

谢谢!这就是我需要的!还有1个问题。如果这段代码在循环中,是否会导致额外的开销,并且会阻止我的代码?我正在谈论100k +迭代循环。 – Deepsy

相关问题