JS-Array <-> SB-Array & JS-JSON <-> SB-JSON?

Just starting out? Need help? Post your questions and find answers here.
User avatar
Peter
Posts: 1086
Joined: Mon Feb 24, 2014 10:17 pm
Location: 127.0.0.1:9080
Contact:

JS-Array <-> SB-Array & JS-JSON <-> SB-JSON?

Post by Peter »

Hello,

is there an easy way to convert between

* JavaScript-Array and SpiderBasic-Array and

* JavaScript-JSON and SpiderBasic-JSON

(and vice versa)?

Thanks in advance & Greetings ... Peter
User avatar
Peter
Posts: 1086
Joined: Mon Feb 24, 2014 10:17 pm
Location: 127.0.0.1:9080
Contact:

Re: JS-Array <-> SB-Array & JS-JSON <-> SB-JSON?

Post by Peter »

ok, here's my first attempt for JavaScript-Array <-> SpiderBasic-Array and vice versa:

Converting a SpiderBasic-Array to a JavaScript-Array:

Code: Select all

Procedure SbArrayToJsArray(*SbArray, Clone = #False)
  If Clone
    ! return p_sbarray.array.slice(0);
  Else
    ! return p_sbarray.array;
  EndIf
EndProcedure
Example (JsArrayToSbArray()):

Code: Select all

EnableExplicit

Define Counter
  
Debug "SbArray:"

; create a SB-Array:
Dim SbArray(10)

; fill in some values
For Counter = 0 To ArraySize(SbArray())
  SbArray(Counter) = Counter
Next

; debug the values
For Counter = 0 To ArraySize(SbArray())
  Debug SbArray(Counter)
Next

Debug "JsArray:"

Define JsArray

JsArray = SbArrayToJsArray(SbArray())

! for (let counter in v_jsarray) {
!   spider.debug.Print(v_jsarray[counter]);
! }
Converting a JavaScript-Array to a SpiderBasic-Array:

Code: Select all

Procedure JsArrayToSbArray(JsArray, *SbArray, Clone = #False)
  
  ! // getting array-dimensions:
  
  ! var dimensions = [];
  ! var arr = v_jsarray;
  ! for (;;) {
  !   dimensions.push(arr.length);
  !   if (Array.isArray(arr[0])) {
  !     arr = arr[0];
  !   } else {
  !     break;
  !   }
  ! }  
  
  If Clone
    ! p_sbarray.array = v_jsarray.slice(0);
  Else
    ! p_sbarray.array = v_jsarray;
  EndIf
  
  ! p_sbarray.dimensions = [];
  ! for (var counter = 0; counter < dimensions.length; counter ++) {
  !   p_sbarray.dimensions.push(dimensions[0]);
  ! }
  ! p_sbarray.nbDimensions = dimensions[1];
  
EndProcedure
Example (JsArrayToSbArray()):

Code: Select all

Dim SbArray(0)

Define JsArray

! v_jsarray = [ 1, 2, 3, 4, 5 ];

Debug ArraySize(SbArray())

JsArrayToSbArray(JsArray, SbArray())

Debug ArraySize(SbArray())

For Counter = 0 To ArraySize(SbArray()) - 1
  Debug SbArray(Counter)
Next
to be continued...

Contributions are welcome!

Greetings ... Peter
Post Reply