Skip to content

Commit 0409fc5

Browse files
committed
fix: merge operation when values contain underscores
1 parent 234874d commit 0409fc5

1 file changed

Lines changed: 23 additions & 15 deletions

File tree

danfojs-browser/src/core/merge.js

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,17 @@ export class Merge {
7575
keys combination.
7676
*/
7777
for (let i = 0; i < left_values.length; i++) {
78-
7978
let left_value = left_values[i];
80-
let right_value = right_values[i];
81-
82-
let right_key_comb = "";
83-
let left_key_comb = "";
79+
let left_key_comb_values = [];
8480

8581
//get the value in the column index
8682
for (let j = 0; j < this.left_col_index.length; j++) {
8783
let index = this.left_col_index[j];
8884

89-
left_key_comb += `_${left_value[index]}`;
85+
left_key_comb_values.push(left_value[index]);
9086
}
87+
//combine into single hashable string
88+
let left_key_comb = left_key_comb_values.join('_');
9189

9290
let self = this; // assign the this scope to self
9391
//filter out the value that are not the column key
@@ -99,30 +97,38 @@ export class Merge {
9997
//before storing the key combination and the value
10098
//associated with it
10199
if (utils.__key_in_object(this.left_key_dict, left_key_comb)) {
102-
this.left_key_dict[left_key_comb].push(left_value_filter);
100+
this.left_key_dict[left_key_comb].filters.push(left_value_filter);
103101
} else {
104-
this.left_key_dict[left_key_comb] = [ left_value_filter ];
102+
this.left_key_dict[left_key_comb] = {
103+
filters: [left_value_filter],
104+
comb_values: left_key_comb_values
105+
};
105106
}
106107

107108
}
108109
for (let i = 0; i < right_values.length; i++) {
109110
let right_value = right_values[i];
110-
let right_key_comb = "";
111+
let right_key_comb_values = [];
111112

112113
for (let j = 0; j < this.right_col_index.length; j++) {
113114
let index = this.right_col_index[j];
114115

115-
right_key_comb += `_${right_value[index]}`;
116+
right_key_comb_values.push(right_value[index]);
116117
}
118+
let right_key_comb = right_key_comb_values.join('_');
119+
117120
let self = this;
118121
let right_value_filter = right_value.filter(function (val, index) {
119122
return !self.right_col_index.includes(index);
120123
});
121124

122125
if (utils.__key_in_object(this.right_key_dict, right_key_comb)) {
123-
this.right_key_dict[right_key_comb].push(right_value_filter);
126+
this.right_key_dict[right_key_comb].filters.push(right_value_filter);
124127
} else {
125-
this.right_key_dict[right_key_comb] = [ right_value_filter ];
128+
this.right_key_dict[right_key_comb] = {
129+
filters: [right_value_filter],
130+
comb_values: right_key_comb_values
131+
};
126132
}
127133
}
128134

@@ -242,7 +248,8 @@ export class Merge {
242248
});
243249

244250
if (utils.__key_in_object(this.left_key_dict, key)) {
245-
let left_row = this.left_key_dict[key];
251+
let left_row = this.left_key_dict[key].filters;
252+
let key_array = this.left_key_dict[key].comb_values;
246253

247254

248255
for (let left_i = 0; left_i < left_row.length; left_i++) {
@@ -251,7 +258,7 @@ export class Merge {
251258

252259
if (utils.__key_in_object(this.right_key_dict, key)) {
253260

254-
let right_row = this.right_key_dict[key];
261+
let right_row = this.right_key_dict[key].filters;
255262

256263
for (let r_i = 0; r_i < right_row.length; r_i++) {
257264

@@ -280,7 +287,8 @@ export class Merge {
280287
}
281288
} else {
282289

283-
let right_row = this.right_key_dict[key];
290+
let right_row = this.right_key_dict[key].filters;
291+
let key_array = this.right_key_dict[key].comb_values;
284292

285293
for (let i = 0; i < right_row.length; i++) {
286294

0 commit comments

Comments
 (0)