3 回答

TA貢獻(xiàn)1817條經(jīng)驗 獲得超14個贊
您可以從頭到尾循環(huán)兩次并省略相同的索引。
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貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊
你想要的是......在數(shù)學(xué)上......不是排列,而是沒有重復(fù)的變化(但這實際上是無關(guān)緊要的)。
我早些時候在 PHP 中為此編寫了一個代碼,這是它的 JS 變體(選擇給定數(shù)量的元素,可以處理數(shù)據(jù)中的重復(fù)等):
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貢獻(xiàn)1820條經(jīng)驗 獲得超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]);
}
}
添加回答
舉報