Skip to content

Instantly share code, notes, and snippets.

@freezer333
Created March 22, 2017 21:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save freezer333/776a5eec618c31cfe1cfb812775c22eb to your computer and use it in GitHub Desktop.
Save freezer333/776a5eec618c31cfe1cfb812775c22eb to your computer and use it in GitHub Desktop.
Access array in object via NAN
// 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