为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Javascript 中进行排列?

如何在 Javascript 中进行排列?

拉风的咖菲猫 2022-10-08 17:13:15
我想用 javascript 进行排列,这是我的代码const arr = [1, 2, 3, 4, 5];for (let i1 = 0; i1 < arr.length; i1++) {  for (let i2 = i1 + 1; i2 < arr.length; i2++) {    console.log(arr[i1] + ' ' + arr[i2]);  }}https://jsfiddle.net/op51x6mv/1/该代码的结果:["1 2", "1 3", "1 4", "1 5", "2 3", "2 4", "2 5", "3 4", "3 5", "4 5"]我想问,为什么排列的所有结果都没有显示出来?从这些结果中我没有看到数字["2 1", "3 1", "3 2", "4 1", "4 2", "4 3", "5 1", "5 2", "5 3", "5 4"]请告诉我这段代码的错误在哪里?或者,如果您有更好的代码,请帮助我。谢谢
查看完整描述

3 回答

?
大话西游666

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]);

    }

}


查看完整回答
反对 回复 2022-10-08
?
萧十郎

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(' ')))


查看完整回答
反对 回复 2022-10-08
?
DIEA

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]);

  }

}


查看完整回答
反对 回复 2022-10-08
  • 3 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信