如何迭代对象中的属性
How do I iterate over properties in an Object
我想遍历V8 C++函数中的对象。
NodeJS:
node.addProperties({"user":"testuser","password":"passwd"};
我想把"user"answers"password"这两个名称和值传递给一个C++方法,该方法接受以下参数:
AddProperty(char * name, char * value);
名称/值对的数量可能不同,所以我需要一个通用的解决方案。
我能得到一些帮助,让我走上正轨吗。
我一直在为Node&V8,但我只是没有这个的想法了:)
假设v8足够新(io.js或node0.12),其中the_object
是从js 传递的对象
Local<Array> property_names = the_object->GetOwnPropertyNames();
for (int i = 0; i < property_names->Length(); ++i) {
Local<Value> key = property_names->Get(i);
Local<Value> value = the_object->Get(key);
if (key->IsString() && value->IsString()) {
String::Utf8Value utf8_key(key);
String::Utf8Value utf8_value(value);
AddProperty(*utf8_key, *utf8_value);
} else {
// Throw an error or something
}
}
由于我刚刚为我的宝石做了这件事,我可能会对@Esailija的这个答案添加一些细微的更改,现在已经被弃用:
if (value->IsObject()) {
Local<Context> context = Context::New(isolate);
Local<Object> object = value->ToObject();
MaybeLocal<Array> maybe_props = object->GetOwnPropertyNames(context);
if (!maybe_props.IsEmpty()) {
Local<Array> props = maybe_props.ToLocalChecked();
for(uint32_t i=0; i < props->Length(); i++) {
Local<Value> key = props->Get(i);
Local<Value> value = object->Get(key);
// do stuff with key / value
}
}
}
主要的补充是
- 你必须有一个上下文来获取属性名称,旧的方法正在被弃用
- 将值转换为对象时需要小心
这现在可以工作,但一如既往地确保检查v8.h
以获得最新的非弃用方式。
相关文章:
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 对象属性同级访问
- 迭代 Napi::对象属性(键)在 Node.js C++ N-API 中
- 是否可以在C++(17)中捕获某些对象属性的破坏性赋值事件
- 分配以下对象属性在哪里
- sutex作为对象属性和对象的向量
- C++ - 在类中包含不是类对象属性的变量是否是一种不好的做法
- 根据对象属性从列表中删除对象
- 将对象属性替换为列表
- 查找对象属性是否位于对象向量C++中
- 未知EABI对象属性44
- 按矢量中的对象属性合并排序
- 如何访问带有静态回调的对象属性
- c++中对象属性的内存分配
- 为什么对象属性的值在 c++ 中将其指针添加到映射后返回零
- 如何检查对象属性更新是否存在 std::map 键,否则插入一个新键?
- 从ASP.NET应用程序查询Active Directory对象属性将返回旧结果
- 性能对象属性与范围变量
- 无法访问对象属性
- 如何从对象方法中访问对象属性