@@ -12,7 +12,7 @@ function find(key, map) {
1212 return new ErlangTypes . Tuple ( BADMAP , map ) ;
1313 }
1414
15- const value = map [ key ] ;
15+ const value = map . get ( key ) ;
1616
1717 if ( typeof value !== 'undefined' ) {
1818 return new ErlangTypes . Tuple ( OK , value ) ;
@@ -24,7 +24,7 @@ function find(key, map) {
2424function fold ( fun , init , map ) {
2525 let acc = init ;
2626
27- for ( const [ key , value ] of to_list ( map ) ) {
27+ for ( const [ key , value ] of map . entries ( ) ) {
2828 acc = fun ( key , value , acc ) ;
2929 }
3030
@@ -36,9 +36,9 @@ function remove(key, map1) {
3636 return new ErlangTypes . Tuple ( BADMAP , map1 ) ;
3737 }
3838
39- const map2 = Object . assign ( { } , map1 ) ;
39+ const map2 = new Map ( map1 ) ;
4040
41- delete map2 [ key ] ;
41+ map2 . delete ( key ) ;
4242
4343 return map2 ;
4444}
@@ -50,8 +50,8 @@ function to_list(map) {
5050
5151 const list = [ ] ;
5252
53- for ( const key of keys ( map ) ) {
54- list . push ( new ErlangTypes . Tuple ( key , map [ key ] ) ) ;
53+ for ( const [ key , value ] of map . entries ( ) ) {
54+ list . push ( new ErlangTypes . Tuple ( key , value ) ) ;
5555 }
5656
5757 return list ;
@@ -60,54 +60,39 @@ function to_list(map) {
6060function from_list ( list ) {
6161 return list . reduce ( ( acc , item ) => {
6262 const [ key , value ] = item ;
63- acc [ key ] = value ;
63+ acc . set ( key , value ) ;
6464
6565 return acc ;
66- } , { } ) ;
66+ } , new Map ( ) ) ;
6767}
6868
6969function keys ( map ) {
7070 if ( erlang . is_map ( map ) === false ) {
7171 return new ErlangTypes . Tuple ( BADMAP , map ) ;
7272 }
7373
74- const keys = [ ] ;
75-
76- for ( const key of Object . getOwnPropertySymbols ( map ) ) {
77- keys . push ( key ) ;
78- }
79-
80- for ( const key of Object . getOwnPropertyNames ( map ) ) {
81- keys . push ( key ) ;
82- }
83-
84- return keys ;
74+ return Array . from ( map . keys ( ) ) ;
8575}
8676
8777function values ( map ) {
8878 if ( erlang . is_map ( map ) === false ) {
8979 return new ErlangTypes . Tuple ( BADMAP , map ) ;
9080 }
9181
92- const theValues = [ ] ;
93-
94- for ( const key of keys ( map ) ) {
95- theValues . push ( map [ key ] ) ;
96- }
97-
98- return theValues ;
82+ return Array . from ( map . values ( ) ) ;
9983}
10084
10185function is_key ( key , map ) {
102- return map . hasOwnProperty ( key ) ;
86+ return map . has ( key ) ;
10387}
10488
10589function put ( key , value , map1 ) {
10690 if ( erlang . is_map ( map1 ) === false ) {
10791 return new ErlangTypes . Tuple ( BADMAP , map1 ) ;
10892 }
10993
110- const map2 = Object . assign ( { } , map1 , { [ key ] : value } ) ;
94+ const map2 = new Map ( map1 ) ;
95+ map2 . set ( key , value ) ;
11196
11297 return map2 ;
11398}
@@ -121,7 +106,7 @@ function merge(map1, map2) {
121106 return new ErlangTypes . Tuple ( BADMAP , map2 ) ;
122107 }
123108
124- return Object . assign ( { } , map1 , map2 ) ;
109+ return new Map ( [ ... map1 , ... map2 ] ) ;
125110}
126111
127112function update ( key , value , map1 ) {
@@ -133,7 +118,7 @@ function update(key, value, map1) {
133118 return new ErlangTypes . Tuple ( BADKEY , key ) ;
134119 }
135120
136- return Object . assign ( { } , map1 , { [ key ] : value } ) ;
121+ return new Map ( [ ... map1 , [ key , value ] ] ) ;
137122}
138123
139124function get ( ...args ) {
@@ -145,7 +130,7 @@ function get(...args) {
145130 }
146131
147132 if ( is_key ( key ) ) {
148- return map [ key ] ;
133+ return map . get ( key ) ;
149134 }
150135
151136 if ( args . length === 3 ) {
@@ -164,9 +149,9 @@ function take(key, map1) {
164149 return ERROR ;
165150 }
166151
167- const value = map1 [ key ] ;
168- const map2 = Object . assign ( { } , map1 ) ;
169- delete map2 [ key ] ;
152+ const value = map1 . get ( key ) ;
153+ const map2 = new Map ( map1 ) ;
154+ map2 . delete ( key ) ;
170155
171156 return new ErlangTypes . Tuple ( value , map2 ) ;
172157}
0 commit comments