2014-04-18 95 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

相關問題