如何在Cheerp/js中迭代动态命名的对象? 是C++到JS/WASM转发器。 使用C++,我可以通过静态定义对象的类型和名称(以及成员)来与 ExtNe>/Cudio.JavaScript对象进行接口。

如何在Cheerp/js中迭代动态命名的对象? 是C++到JS/WASM转发器。 使用C++,我可以通过静态定义对象的类型和名称(以及成员)来与 ExtNe>/Cudio.JavaScript对象进行接口。,javascript,c++,llvm,cheerp,Javascript,C++,Llvm,Cheerp,以以下对象为例: var example1 = { "itemA" : { value : 3 }, "itemB" : { value : 1 }, "item3165942" : { value : 4 } } 静态地将example1定义为一个结构,而将itemA/itemB定义为子结构是很简单的。但我永远无法访问example1[“item3165942”] 我如何动态地检索、索引和迭代C+

以以下对象为例:

var example1 = {
    "itemA" : {
        value : 3
    },
    "itemB" : {
        value : 1
    },
    "item3165942" : {
        value : 4
    }
}
静态地将
example1
定义为一个结构,而将itemA/itemB定义为子结构是很简单的。但我永远无法访问
example1[“item3165942”]

<>我如何动态地检索、索引和迭代C++中的JavaScript对象的键/值?假设
example1
中的所有项目都是以下类型:

struct item_type {
    int32_t value;
};

如果需要处理结构未知的属性(=在编译时不知道JavaScript结构的结构),最好遍历其条目:

#包括
#包括
命名空间客户端
{
结构CustomItem:公共对象
{
int get_value();
};
}
无效枚举属性(客户端::对象*obj)
{
自动条目=客户端::对象::键(obj);
对于(int i=0;iget_length();i++)
{
client::String*K=(client::String*)(*entries)[i];
client::CustomItem*CI=(client::CustomItem*)((*obj)[*K]);
client::console.log(*K,CI->get_value());
}
}
请注意,必须显式进行两种类型转换:指定条目为client::String*,以及映射项的类型为(client::CustomItem*)。 您还应该在名称空间客户端内部声明CustomItem有一个方法get_value()(该方法将被编译为名为“value”的属性上的javascript getter)

您还可以使用相同的模式通过
[“itemA”]
访问属性,方法如下:

client::CustomItem*CI=(client::CustomItem*)((*obj)[“itemA]”);

尝试传输某些迭代代码时会发生什么情况?你能展示一个C++中的东西,你想转换成JS吗?显示了使用for循环的迭代。您可以使用cheep的特性来完成此任务。你也可以编写一个浏览器端函数来进行这个抽取,并从C++调用它。下面是我要做的。请注意,在我的例子中,<>代码>项>代码只在C++内存模型中定义,并且完全与JavaScript世界断开连接。您链接的示例就是这样做的:它从不与任何Javascript本机对象交互,而只是“模拟”一个
向量的行为(而不是
映射)
--我试图用动态键从C++内部索引外部JavaScript原生对象,就像我将如何访问C++标准>代码::这是正确的吗?它不应该取而代之的是
客户端::对象*
吗?说到动态情况:如果我为一个对象编制索引,而键不存在怎么办?我是获得
0
还是获得未定义的行为?我不确定,我希望属性将被创建并映射到“未定义”对象。但不要指望它。如果您不知道某个属性是否存在,可以首先检查调用obj->hasOwnProperty(“itemA”)以首先验证该属性是否存在,然后才对其进行索引。