首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Duktape中遍历未知对象

在Duktape中遍历未知对象
EN

Stack Overflow用户
提问于 2017-03-15 16:58:10
回答 1查看 561关注 0票数 5

所以我有这个duktape函数,它接受一个对象作为其中一个参数。在正常情况下,要检索每个对象属性的值,我会使用duk_get_prop()duk_push_string(),但这假设我事先知道要获取的对象的结构。

现在,考虑一个接受具有未知结构的对象的函数。我需要迭代它的键,并检索它的所有值。

例如,我正在尝试将这样的对象转换为C++ std::map<string, string>,从Javascript myFunction({x: 1, y: 3, z: 35})调用应该和myFunction({foo: 12, bar: 43})一样好用。

看起来duk_enum()是一个合适的函数,但是我不太理解它是如何工作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 10:08:04

duk_enum()的基本用法是:

代码语言:javascript
复制
/* Assume target object to enumerate is at obj_idx.
 * For a function's 1st argument that would be 0.
 */

duk_enum(ctx, 0 /*enum_flags*/);  /* Pushes enumerator object. */
while (duk_next(ctx, -1, 1 /*get_value*/)) {  /* -1 points to enumerator, here top of stack */
    /* Each time duk_enum() finds a new key/value pair, it
     * gets pushed to the value stack.  So here the stack
     * top is [ ... enum key value ].  Enum is at index -3,
     * key at -2, value at -1, all relative to stack top.
     */

    printf("enumerated key '%s', value '%s'\n", duk_safe_to_string(ctx, -2), duk_safe_to_string(ctx, -1));

    /* When you're done with the key/value, pop them off. */
    duk_pop_2(ctx);
}
duk_pop(ctx);  /* Pop enumerator object. */

如果您不希望自动推送该值,请为duk_next()的"get_value“参数传递0,并且仅在循环结束时弹出键。

duk_enum()有一组标志来控制要枚举的内容。0对应于"for (var K in obj) { ... }“枚举。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42805075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档