15

v8 への c++ 拡張機能を作成していて、Array オブジェクトをそれに渡したいと考えています。入力引数は IsArray() でテストできることがわかりますが、ToArray() はありません。

その長さにアクセスし、数値インデックスで要素を要求するにはどうすればよいですか?

Handle<Value> MyExtension(const Arguments& args)
{
    Handle<Value> v = args[0];
    if(v->IsArray())
    {
        // convert to array, find its length, and access its members by index... ?
    }
...
}

ここで明らかな何かが欠けているに違いありません。オブジェクトはそのすべてのプロパティを返すことができますが、それは私が望んでいたものではありません。配列として取得する方法はありますか?

読んでくれてありがとう。

4

4 に答える 4

13

Castハンドルのメソッドを使用して、別の型にキャストする必要があります。

v8::Handle<v8::Array> array = v8::Handle<v8::Array>::Cast(v);
于 2012-07-29T08:14:16.597 に答える
10

配列に変換またはキャストする方法を見つけることができませんでした。たぶん方法があります。しかしobject->IsArray()、 、object->get("length")->Uint32Value()、およびを実行するobject->get(int)ことで、配列をたどることができることがわかりました。

v8::Handle<v8::Object> obj;
// ... init obj from arguments or wherever ...

int length = 0;
if(obj->IsArray())
{
    length = obj->Get(v8::String::New("length"))->ToObject()->Uint32Value();
}

for(int i = 0; i < length; i++)
{
    v8::Local<v8::Value> element = obj->Get(i);
    // do something with element
}
于 2012-07-29T20:03:44.417 に答える
3

以下は私の成功したコードです

v8::Handle<v8::Value> obj(args[0]);

 if(obj->IsArray()){

     v8::Local<v8::Array> arr= v8::Local<v8::Array>::Cast(args[0]);
     v8::String::Utf8Value key(arr->Get(0));
     v8::String::Utf8Value value(arr->Get(1));

 }
于 2014-04-15T02:11:17.180 に答える