Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript是将数组元素相互组合的最有效方法_Javascript_Arrays_Set - Fatal编程技术网

Javascript是将数组元素相互组合的最有效方法

Javascript是将数组元素相互组合的最有效方法,javascript,arrays,set,Javascript,Arrays,Set,我试图将字符串数组与独特的组合组合在一起,比如“Mark | Tom”,但没有“Tom | Mark” 我编写了以下代码: 让arr=['Tom','Danny','Mark'] 设集合=[] for(设i=0;iname!=arr[i]) 其他。forEach((其他)=>{ 设newel=arr[i]+'|'+其他 设test=newel.split(“|”) if(set.includes(test[1]+'|'+test[0])| | set.includes(newel))返回 设置

我试图将字符串数组与独特的组合组合在一起,比如“Mark | Tom”,但没有“Tom | Mark”

我编写了以下代码:

让arr=['Tom','Danny','Mark']
设集合=[]
for(设i=0;iname!=arr[i])
其他。forEach((其他)=>{
设newel=arr[i]+'|'+其他
设test=newel.split(“|”)
if(set.includes(test[1]+'|'+test[0])| | set.includes(newel))返回
设置推送(newel)
})
}
console.log(组)
这个怎么样:

const arr=['Tom','Danny','Mark'];
常量集=[];
for(设i=0;i控制台日志(套)您可以创建一组传递的数组,循环遍历数组,对于每个索引,在该索引之后获取数组,并循环遍历其他数组和构建组合

让arr=['Tom','Danny','Mark']
const uniqueCombo=(arr)=>{
let newSet=[…新集(arr)]
return newSet.reduce((op,inp,index)=>{
newSet.slice(索引+1,).forEach(v=>{
op.push(inp+'|'+v)
})
返回操作
},[])
}
控制台日志(uniqueCombo(arr))
log(uniqueCombo(['A','B','A','C','D']))

log(uniqueCombo(['A','B','A','C'])
试试这个。这种方法过滤掉以前用于将项推送到数组的索引

const arr=['Tom','Danny','Mark'];
常数梳=[];
for(设i=0;i控制台日志(comb)我会将您的数组设置为一个集合,这样它将在开始时删除所有重复项,如下所示:

new Set(['Tom', 'Danny', 'Mark']);
现在,您可以使用
.flatMap
第i个
元素与所有元素配对,直到
第n个
元素

const name\u arr=Array.from(新集合(['Tom','Danny','Mark']);
const res=name\u arr.flatMap(
(name,i)=>name_arr.slice(i+1).reduce((a,n)=>[…a,name+''|'+n],]))
);

控制台日志(res)您可以发布所需的输出吗?还有为什么它应该是
Mark | Tom
而不是
Tom | Mark
?只要运行代码片段就行了如果它是Mark | Tom或Tom | Mark,它必须是唯一的组合输出您的代码显示与逻辑不匹配,因此会更好地达到预期的结果,您想
Tony | Dany | Mark
也在输出中吗?当然!下一步是匹配高音组合请用期望的结果更新您的帖子您可以在SO mate上创建一个运行片段,@CodeManiac Ahhh非常感谢!我一直在寻找:)永远欢迎,不管怎样,这是个好答案,可能是最有效的答案+1