簡體   English   中英

如何遍歷對象中的屬性

[英]How do I iterate over properties in an Object

我想遍歷V8 C ++函數中的對象。

NodeJS:

node.addProperties({"user":"testuser","password":"passwd"};

我想將名稱和值的“用戶”和“密碼”傳遞給采用如下參數的C ++方法:

AddProperty(char * name, char * value);

名稱/值對的數量可能有所不同,因此我需要一個通用的解決方案。

我能否得到一些幫助,以便步入正軌。

我一直在為Node&V8編寫更簡單的C ++包裝器,但是我對此用盡了很多想法:)

假設最近有足夠的v8(io.js或節點0.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以獲取最新的不推薦使用的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM