Created
March 22, 2017 21:37
-
-
Save freezer333/776a5eec618c31cfe1cfb812775c22eb to your computer and use it in GitHub Desktop.
Access array in object via NAN
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// JS calling code | |
var obj = { | |
a: 5, | |
b : [1, 2, 3] | |
} | |
addon.add_array(obj); | |
assert(obj.b[0] == 6); | |
assert(obj.b[1] == 7); | |
assert(obj.b[2] == 8); | |
///////////////////////// | |
// accept object with a number "a" and an array "b". Add a to all b values. | |
NAN_METHOD(AddArray) { | |
if ( info.Length() > 0 ) { | |
// initial input parameter is an object | |
Local<Object> input = info[0]->ToObject(); | |
Local<String> a_prop = Nan::New<String>("a").ToLocalChecked(); | |
Local<String> b_prop = Nan::New<String>("b").ToLocalChecked(); | |
// Use NumberValue to get the number property named a | |
double a = Nan::Get(input, a_prop).ToLocalChecked()->NumberValue(); | |
// Use Cast to get the array property named b | |
Local<Array> b = Local<Array>::Cast(Nan::Get(input, b_prop).ToLocalChecked()); | |
for (unsigned int i = 0; i < b->Length(); i++ ) { | |
if (Nan::Has(b, i).FromJust()) { | |
// get data from a particular index | |
double value = Nan::Get(b, i).ToLocalChecked()->NumberValue(); | |
// set a particular index - note the array parameter | |
// is mutable | |
Nan::Set(b, i, Nan::New<Number>(value + a)); | |
} | |
} | |
} | |
} | |
NAN_MODULE_INIT(Init) { | |
Nan::Set(target, New<String>("add_array").ToLocalChecked(), | |
GetFunction(New<FunctionTemplate>(AddArray)).ToLocalChecked()); | |
} | |
NODE_MODULE(my_addon, Init) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment