3 回答
TA贡献1817条经验 获得超14个赞
您可以从头到尾循环两次并省略相同的索引。
const arr = [1, 2, 3, 4, 5];
for (let i1 = 0; i1 < arr.length; i1++) {
for (let i2 = 0; i2 < arr.length; i2++) {
if (i1 === i2) continue;
console.log(arr[i1] + ' ' + arr[i2]);
}
}
TA贡献1815条经验 获得超13个赞
你想要的是......在数学上......不是排列,而是没有重复的变化(但这实际上是无关紧要的)。
我早些时候在 PHP 中为此编写了一个代码,这是它的 JS 变体(选择给定数量的元素,可以处理数据中的重复等):
const variations = (arr, n = arr.length) => {
if(n === 0) return [[]]
if(!(n >= 0)) return []
const output = []
for(let i = 0; i < arr.length; i++){
if(arr.indexOf(arr[i]) < i) continue
const newArr = arr.slice()
newArr.splice(i, 1)
output.push(...variations(newArr, n - 1).map(e => [arr[i], ...e]))
}
return output
}
const arr = [1, 2, 3, 4, 5];
console.log(variations(arr, 2))
//If you want to concatenate them, use:
console.log(variations(arr, 2).map(e => e.join(' ')))
TA贡献1820条经验 获得超2个赞
const arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
if (i === j) continue;
console.log(arr[i] + ' ' + arr[j]);
}
}
添加回答
举报