Skip to content

Commit 69873ad

Browse files
authored
Merge pull request #167 from jpjagt/fix-merge-for-underscored-values
fix: merge operation when values contain underscores
2 parents 023b25a + 5713dae commit 69873ad

3 files changed

Lines changed: 67 additions & 43 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

danfojs-node/dist/core/merge.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,45 +69,51 @@ class Merge {
6969

7070
for (let i = 0; i < left_values.length; i++) {
7171
let left_value = left_values[i];
72-
let right_value = right_values[i];
73-
let right_key_comb = "";
74-
let left_key_comb = "";
72+
let left_key_comb_values = [];
7573

7674
for (let j = 0; j < this.left_col_index.length; j++) {
7775
let index = this.left_col_index[j];
78-
left_key_comb += `_${left_value[index]}`;
76+
left_key_comb_values.push(left_value[index]);
7977
}
8078

79+
let left_key_comb = left_key_comb_values.join('_');
8180
let self = this;
8281
let left_value_filter = left_value.filter(function (val, index) {
8382
return !self.left_col_index.includes(index);
8483
});
8584

8685
if (utils.__key_in_object(this.left_key_dict, left_key_comb)) {
87-
this.left_key_dict[left_key_comb].push(left_value_filter);
86+
this.left_key_dict[left_key_comb].filters.push(left_value_filter);
8887
} else {
89-
this.left_key_dict[left_key_comb] = [left_value_filter];
88+
this.left_key_dict[left_key_comb] = {
89+
filters: [left_value_filter],
90+
comb_values: left_key_comb_values
91+
};
9092
}
9193
}
9294

9395
for (let i = 0; i < right_values.length; i++) {
9496
let right_value = right_values[i];
95-
let right_key_comb = "";
97+
let right_key_comb_values = [];
9698

9799
for (let j = 0; j < this.right_col_index.length; j++) {
98100
let index = this.right_col_index[j];
99-
right_key_comb += `_${right_value[index]}`;
101+
right_key_comb_values.push(right_value[index]);
100102
}
101103

104+
let right_key_comb = right_key_comb_values.join('_');
102105
let self = this;
103106
let right_value_filter = right_value.filter(function (val, index) {
104107
return !self.right_col_index.includes(index);
105108
});
106109

107110
if (utils.__key_in_object(this.right_key_dict, right_key_comb)) {
108-
this.right_key_dict[right_key_comb].push(right_value_filter);
111+
this.right_key_dict[right_key_comb].filters.push(right_value_filter);
109112
} else {
110-
this.right_key_dict[right_key_comb] = [right_value_filter];
113+
this.right_key_dict[right_key_comb] = {
114+
filters: [right_value_filter],
115+
comb_values: right_key_comb_values
116+
};
111117
}
112118
}
113119

@@ -206,13 +212,14 @@ class Merge {
206212
});
207213

208214
if (utils.__key_in_object(this.left_key_dict, key)) {
209-
let left_row = this.left_key_dict[key];
215+
let left_row = this.left_key_dict[key].filters;
216+
let key_array = this.left_key_dict[key].comb_values;
210217

211218
for (let left_i = 0; left_i < left_row.length; left_i++) {
212219
let left_row_row = left_row[left_i];
213220

214221
if (utils.__key_in_object(this.right_key_dict, key)) {
215-
let right_row = this.right_key_dict[key];
222+
let right_row = this.right_key_dict[key].filters;
216223

217224
for (let r_i = 0; r_i < right_row.length; r_i++) {
218225
let right_row_row = right_row[r_i];
@@ -235,7 +242,8 @@ class Merge {
235242
}
236243
}
237244
} else {
238-
let right_row = this.right_key_dict[key];
245+
let right_row = this.right_key_dict[key].filters;
246+
let key_array = this.right_key_dict[key].comb_values;
239247

240248
for (let i = 0; i < right_row.length; i++) {
241249
let right_row_row = right_row[i];

danfojs-node/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)