Как сделать перестановку в Javascript? - PullRequest
3 голосов
/ 17 июня 2020

Я хочу сделать перестановку с 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 ]

3 голосов
/ 17 июня 2020

Вы можете oop от начала до конца дважды и пропустить одни и те же индексы.

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]);
    }
}
1 голос
/ 17 июня 2020

Вы хотите ... математически ... не перестановок, а вариаций без повторения (но это на самом деле не имеет значения).

Я написал код для этого в PHP чуть раньше , вот его вариант JS (выбирает заданное количество элементов, может обрабатывать повторения в данных и т. Д. c.):

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(' ')))
0 голосов
/ 17 июня 2020

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]);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...