2014-02-24 17 views
0

我有一个从node.js被调用的C++模块。我想传入一个散列并从C++代码中检索这两个键和值,但我无法弄清楚如何获取它们。这是我想办理什么:如何从C++模块获取node.js哈希键?

var mod = require('MyModule') 
var conn = mod.createConnection() 
conn.connect({ 'uid': 'graeme', 
       'pwd': 'mypassword' }) 

在我的C++的方法,我可以用args[0]->IsObject(),以确定该参数是一个哈希,但我不能找到一个办法让键(“UID”, 'pwd')或者值('graeme','mypassword')。

是否有办法从这些类型的对象中获取键和值?

+0

你为什么要设置这样一个阵列上的参数?然后,您只需将任意属性添加到空数组。 'cs ['uid'] ='graeme''不会添加到数组中,它会为数组中的值正切地指定一个属性。 – loganfsmyth

+0

@loganfsmyth啊,谢谢你。我对JavaScript相当陌生,发现类似于在线的代码。我的印象是,第二个代码基本上创造了与第一个相同的对象。 –

+0

没有问题。它们都使用相同的键创建对象,只是第二个也是一个Array(Object的子类)。让它成为一个数组是令人困惑的,因为它没有整数键,因此是一个空数组。 – loganfsmyth

回答

4

你传递数组的第二个例子并没有什么意义,但是对于你的一般观点,你可以使用GetOwnPropertyNames来读取属性名称。

Local<Object> obj = args[0].As<Object>(); 
Local<Array> props = obj->GetOwnPropertyNames(); 

for (int i = 0, len = props->Length(); i < len; i++){ 
    Local<String> key = props->Get(i).As<String>(); 
    Local<Value> val = obj->Get(key); 
} 

等同于:

var props = Object.getOwnPropertyNames(arguments[0]); 
for (var i = 0, len = props.length; i < len; i++){ 
    var key = props[i]; 
    var value = arguments[0][key]; 
} 
+0

糟糕,这是我从记忆中获得的。我已经更新了我的答案,并且现在实际测试了它。 – loganfsmyth