@@ -176,9 +176,10 @@ class DataFrame {
176176
177177 _joinByType ( gdf1 , gdf2 , type ) {
178178 if ( type === 'out' || type === 'in' ) {
179- const gdf2Groups = gdf2 . listGroups ( ) . map ( groupKey => Object . values ( groupKey ) [ 0 ] ) ;
180- return gdf1 . toCollection ( ) . map ( ( { group, groupKey} ) => {
181- const isContained = gdf2Groups . includes ( Object . values ( groupKey ) [ 0 ] ) ;
179+ const gdf2Hashs = gdf2 . listHashs ( ) ;
180+ return gdf1 . toCollection ( ) . map ( ( { group, hash} ) => {
181+ const isContained = gdf2Hashs . includes ( hash ) ;
182+ console . log ( gdf2 . get ( hash ) . group . listColumns ( ) ) ;
182183 const filterCondition = ( bool ) => bool ? group : false ;
183184 return type === 'out' ? filterCondition ( ! isContained ) : filterCondition ( isContained ) ;
184185 } ) . filter ( group => group ) ;
@@ -188,9 +189,9 @@ class DataFrame {
188189
189190 _join ( dfToJoin , on , types ) {
190191 const newColumns = [ ...new Set ( [ ...this . listColumns ( ) , ...dfToJoin . listColumns ( ) ] ) ] ;
191- const gdf = this . groupBy ( on ) ;
192- const gdfToJoin = dfToJoin . groupBy ( on ) ;
193- return [ ...iter ( [
192+ const gdf = this . groupBy ( ... on ) ;
193+ const gdfToJoin = dfToJoin . groupBy ( ... on ) ;
194+ return [ this . __newInstance__ ( [ ] , newColumns ) , ...iter ( [
194195 ...this . _joinByType ( gdf , gdfToJoin , types [ 0 ] ) ,
195196 ...this . _joinByType ( gdfToJoin , gdf , types [ 1 ] ) ,
196197 ] , group => group . restructure ( newColumns ) ) ] . reduce ( ( p , n ) => p . union ( n ) ) ;
@@ -733,6 +734,7 @@ class DataFrame {
733734 return this . __newInstance__ ( [ ...this , ...dfToUnion ] , this [ __columns__ ] ) ;
734735 }
735736
737+ @checktypes ( 'String' , 'DataFrame' )
736738 /**
737739 * Join two DataFrames.
738740 * @param {DataFrame } dfToJoin The DataFrame to join.
@@ -742,13 +744,13 @@ class DataFrame {
742744 * @example
743745 * df.join(df2, 'column1', 'full')
744746 */
745- join ( dfToJoin , on , how = 'inner' ) {
747+ join ( how , dfToJoin , ... on ) {
746748 const joinMethods = {
747- inner : ( ) => this . innerJoin ( dfToJoin , on ) ,
748- full : ( ) => this . fullJoin ( dfToJoin , on ) ,
749- outer : ( ) => this . outerJoin ( dfToJoin , on ) ,
750- left : ( ) => this . leftJoin ( dfToJoin , on ) ,
751- right : ( ) => this . rightJoin ( dfToJoin , on ) ,
749+ inner : ( ) => this . innerJoin ( dfToJoin , ... on ) ,
750+ full : ( ) => this . fullJoin ( dfToJoin , ... on ) ,
751+ outer : ( ) => this . outerJoin ( dfToJoin , ... on ) ,
752+ left : ( ) => this . leftJoin ( dfToJoin , ... on ) ,
753+ right : ( ) => this . rightJoin ( dfToJoin , ... on ) ,
752754 } ;
753755 return joinMethods [ how ] ( ) ;
754756 }
@@ -763,7 +765,7 @@ class DataFrame {
763765 * df.join(df2, 'id')
764766 * df.join(df2, 'id', 'inner')
765767 */
766- innerJoin ( dfToJoin , on ) {
768+ innerJoin ( dfToJoin , ... on ) {
767769 return this . _join ( dfToJoin , on , [ 'in' , 'in' ] ) ;
768770 }
769771
@@ -776,7 +778,7 @@ class DataFrame {
776778 * df.fullJoin(df2, 'id')
777779 * df.join(df2, 'id', 'full')
778780 */
779- fullJoin ( dfToJoin , on ) {
781+ fullJoin ( dfToJoin , ... on ) {
780782 return this . _join ( dfToJoin , on , [ '' , '' ] ) ;
781783 }
782784
@@ -789,7 +791,7 @@ class DataFrame {
789791 * df2.rightJoin(df2, 'id')
790792 * df2.join(df2, 'id', 'outer')
791793 */
792- outerJoin ( dfToJoin , on ) {
794+ outerJoin ( dfToJoin , ... on ) {
793795 return this . _join ( dfToJoin , on , [ 'out' , 'out' ] ) ;
794796 }
795797
@@ -802,7 +804,7 @@ class DataFrame {
802804 * df.leftJoin(df2, 'id')
803805 * df.join(df2, 'id', 'left')
804806 */
805- leftJoin ( dfToJoin , on ) {
807+ leftJoin ( dfToJoin , ... on ) {
806808 return this . _join ( dfToJoin , on , [ '' , 'in' ] ) ;
807809 }
808810
@@ -815,7 +817,7 @@ class DataFrame {
815817 * df.rightJoin(df2, 'id')
816818 * df.join(df2, 'id', 'right')
817819 */
818- rightJoin ( dfToJoin , on ) {
820+ rightJoin ( dfToJoin , ... on ) {
819821 return this . _join ( dfToJoin , on , [ 'in' , '' ] ) ;
820822 }
821823}
0 commit comments