Javascript 如何找到每个元素的组合
我有一个元素列表:Javascript 如何找到每个元素的组合,javascript,google-apps-script,google-sheets,google-sheets-formula,array-formulas,Javascript,Google Apps Script,Google Sheets,Google Sheets Formula,Array Formulas,我有一个元素列表: John Richard Bill Bob Walter 我想做点什么,把它们的每一个可能的组合放在两列中,不包括重复项。以下是一个例子: A B John Richard John Bill John Bob John Walter Richard Bill Richard Bob Richard Walter Bill Bob Bill
John
Richard
Bill
Bob
Walter
我想做点什么,把它们的每一个可能的组合放在两列中,不包括重复项。以下是一个例子:
A B
John Richard
John Bill
John Bob
John Walter
Richard Bill
Richard Bob
Richard Walter
Bill Bob
Bill Walter
Bob Walter
正如你所看到的,我原谅了约翰和沃尔特·比尔,因为已经有了比尔-沃尔特的组合。如何使用公式实现这一点?以下是我的方法:
function myFunction() {
var names = ['John', 'Richard', 'Bill', 'Bob', 'Walter'];
var result = []
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1")
names.forEach( (element, index) => {
names.slice(index+1,names.length).forEach ( (rest) => {
result.push([element,rest])
})})
sheet.getRange(2,1,result.length,result[0].length).setValues(result);
}
说明:
基本上,您可以遍历名称列表。从每个元素开始,只与下一个元素连接。例如,John是姓名列表中的第一个元素,您可以将John与Richard、Bill、Bob和Walter连接起来。然后转到下一个元素,即Richard,将他与Bill、Bob和Walter连接起来。
这样,您就避免了重复出现,例如:John-John或John-Richard和Richard-John。forEach方法帮助您实现这种迭代方法
参考文献:
如何使用公式来实现这一点
使用:
=数组公式(排序(唯一)查询(如果(
转置(拆分(报告(连接(A1:A和字符(9)),计数(A1:A)),字符(9)))>
转置(拆分(连接)(报告(A1:A和字符(9),计数(A1:A))),字符(9)){
转置(拆分(报告(连接(A1:A和字符(9)),计数(A1:A)),字符(9)),
转置(SPLIT(连接)(REPT(A1:A&CHAR(9),COUNTA(A1:A))),CHAR(9)){
转置(拆分(连接)(报告(A1:A和字符(9),计数(A1:A))),字符(9)),
转置(SPLIT(REPT(CONCATENATE(A1:A&CHAR(9)),COUNTA(A1:A)),CHAR(9))),
“其中Col1Col2”,0)
如果A1:A5包含名称
=ARRAYFORMULA(SPLIT(QUERY(
FLATTEN(
IF(SEQUENCE(COUNTA(A1:A5))<TRANSPOSE(SEQUENCE(COUNTA(A1:A5))),
A1:A5& "☤" & TRANSPOSE(A1:A5)
,)
),
"where Col1 is not null",0),"☤"))
- 使用
将二维矩阵转换为串联名称:IF
矩阵,使用展平
和QUERY
将连接的名称拆回,删除空格SPLIT
=ARRAYFORMULA(SPLIT(QUERY(
FLATTEN(
IF(SEQUENCE(COUNTA(A1:A5))<TRANSPOSE(SEQUENCE(COUNTA(A1:A5))),
A1:A5& "☤" & TRANSPOSE(A1:A5)
,)
),
"where Col1 is not null",0),"☤"))
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
0 0 0 0 0
John☤Rich John☤Bill John☤Bob John☤Walt
Rich☤Bill Rich☤Bob Rich☤Walt
Bill☤Bob Bill☤Walt
Bob☤Walt