I thought I would take a look at all similarities. But you could get only three if you change just one line. I will point it out below:
function sortgroups() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const vs = sh.getRange("A2:E9").getValues();
let obj = { pA: [] };
vs.forEach((r, i) => {
let a = [r[1], r[2], r[3], r[4]];
obj[r[0]] = { chars: a, sub: [] };
obj.pA.push(r[0]);
vs.forEach((s, j) => {
if (j != i) {
let b = [s[1], s[2], s[3], s[4]];
let m = [];//matches
b.forEach((c, k) => {
let idx = a.indexOf(c);
if (~idx) {
m.push(c);
}
})
if (m.length == 3) {//this is the line to change to limit similarites
obj[r[0]].sub.push({ p: s[0], chars: m.join(',') });
}
}
});
});
let r = [];
obj.pA.forEach((p, i) => {
r.push([p, obj[p].chars[0], obj[p].chars[1], obj[p].chars[2], obj[p].chars[3], '', '']);
obj[p].sub.forEach((o, j) => {
r.push(['', '', '', '', '', o.p, o.chars]);
})
})
r.unshift(["Words","Value1","Value2","Value3","Value4","Similar Words","Similarities"]);
sh.getRange(sh.getLastRow() + 2, 1, r.length, r[0].length).setValues(r);
}
Output:
| Words |
Value1 |
Value2 |
Value3 |
Value4 |
Similar Words |
Similarities |
| banana |
A |
B |
C |
D |
|
|
|
|
|
|
|
cheap banana |
B,D,A |
|
|
|
|
|
best banana |
D,C,A |
|
|
|
|
|
how to make banana bread |
A |
|
|
|
|
|
I love banana |
B,C,A,D |
|
|
|
|
|
banana bread |
A,C |
| sweet banana |
L |
N |
O |
J |
|
|
|
|
|
|
|
banana banana |
N,L,O |
|
|
|
|
|
how to make banana bread |
O |
|
|
|
|
|
banana bread |
O |
| cheap banana |
B |
D |
A |
F |
|
|
|
|
|
|
|
banana |
A,B,D |
|
|
|
|
|
best banana |
D,A |
|
|
|
|
|
how to make banana bread |
A |
|
|
|
|
|
I love banana |
B,A,D |
|
|
|
|
|
banana bread |
A |
| best banana |
D |
C |
A |
H |
|
|
|
|
|
|
|
banana |
A,C,D |
|
|
|
|
|
cheap banana |
D,A |
|
|
|
|
|
how to make banana bread |
A |
|
|
|
|
|
I love banana |
C,A,D |
|
|
|
|
|
banana bread |
A,C |
| banana banana |
N |
L |
I |
O |
|
|
|
|
|
|
|
sweet banana |
L,N,O |
|
|
|
|
|
how to make banana bread |
O,I |
|
|
|
|
|
banana bread |
I,O |
| how to make banana bread |
O |
A |
I |
K |
|
|
|
|
|
|
|
banana |
A |
|
|
|
|
|
sweet banana |
O |
|
|
|
|
|
cheap banana |
A |
|
|
|
|
|
best banana |
A |
|
|
|
|
|
banana banana |
I,O |
|
|
|
|
|
I love banana |
A |
|
|
|
|
|
banana bread |
I,O,A |
| I love banana |
B |
C |
A |
D |
|
|
|
|
|
|
|
banana |
A,B,C,D |
|
|
|
|
|
cheap banana |
B,D,A |
|
|
|
|
|
best banana |
D,C,A |
|
|
|
|
|
how to make banana bread |
A |
|
|
|
|
|
banana bread |
A,C |
| banana bread |
I |
O |
A |
C |
|
|
|
|
|
|
|
banana |
A,C |
|
|
|
|
|
sweet banana |
O |
|
|
|
|
|
cheap banana |
A |
|
|
|
|
|
best banana |
C,A |
|
|
|
|
|
banana banana |
I,O |
|
|
|
|
|
how to make banana bread |
O,A,I |
|
|
|
|
|
I love banana |
C,A |
Only Three:
| Words |
Value1 |
Value2 |
Value3 |
Value4 |
Similar Words |
Similarities |
| banana |
A |
B |
C |
D |
|
|
|
|
|
|
|
cheap banana |
B,D,A |
|
|
|
|
|
best banana |
D,C,A |
| sweet banana |
L |
N |
O |
J |
|
|
|
|
|
|
|
banana banana |
N,L,O |
| cheap banana |
B |
D |
A |
F |
|
|
|
|
|
|
|
banana |
A,B,D |
|
|
|
|
|
I love banana |
B,A,D |
| best banana |
D |
C |
A |
H |
|
|
|
|
|
|
|
banana |
A,C,D |
|
|
|
|
|
I love banana |
C,A,D |
| banana banana |
N |
L |
I |
O |
|
|
|
|
|
|
|
sweet banana |
L,N,O |
| how to make banana bread |
O |
A |
I |
K |
|
|
|
|
|
|
|
banana bread |
I,O,A |
| I love banana |
B |
C |
A |
D |
|
|
|
|
|
|
|
cheap banana |
B,D,A |
|
|
|
|
|
best banana |
D,C,A |
| banana bread |
I |
O |
A |
C |
|
|
|
|
|
|
|
how to make banana bread |
O,A,I |