获取数组中元素的所有组合方式

代码

/**
 * 获取 words 成员的所有 组合 方式
 * @param {(string | number)[]} words
 * @return {(string|number)[][]}
 */
function combine (words) {
  const list = []
  words.forEach((word, idx) => {
    const restWords = [...words.slice(0, idx), ...words.slice(idx + 1)]
    if (!restWords.length) { // 最后一位了
      list.push([word])
    } else {
      const groups = combine(restWords)
      groups.forEach(group => {
        list.push([word, ...group])
      })
    }
  })
  return list
}

输出

combine(['A', 'B', 'C'])
[
  [ 'A', 'B', 'C' ],
  [ 'A', 'C', 'B' ],
  [ 'B', 'A', 'C' ],
  [ 'B', 'C', 'A' ],
  [ 'C', 'A', 'B' ],
  [ 'C', 'B', 'A' ]
]
posted @ 2024-02-03 10:39  暗恋桃埖源  阅读(40)  评论(0编辑  收藏  举报