碎片时间学编程「65]:生成数组元素的所有排列(包含重复项)

使用递归。

对于给定数组中的每个元素,为其其余元素创建所有部分排列。

使用Array.prototype.map()方法将元素与每个部分排列组合,然后使用Array.prototype.reduce()方法将所有排列组合到一个数组中。

使Array.prototype.length等于2或1。

⚠️警告:这个函数的执行时间随着每个数组元素呈指数增长。任何超过 8 到 10 个条目都可能导致您的浏览器在尝试解决所有不同组合时挂起。

JavaScript

const permutations = arr => {

  if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;

  return arr.reduce(

    (acc, item, i) =>

      acc.concat(

        permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [

          item,

          ...val,

        ])

      ),

    []

  );

};

更多内容请访问我的网站:https://www.icoderoad.com

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数组的排序 sort()方法排序问题。 sort()方法是Array原型链上自带的方法。 默认排序顺序是根据字符串...
    无迹落花阅读 604评论 1 0
  • 1.用js实现随机选取10~100之间的10个数字,存入一个数组,并排序 //要是获取不重复的,则对随机数...
    persistlu阅读 5,630评论 0 0
  • all 函数封装了every函数,判断条件默认为元素默认转为boolean值,如果都为true,则返回true。否...
    oWSQo阅读 417评论 0 1
  • 今天来讲一下我们js中常用的数组 数组是引用数据类型中的对象数据类型(特殊对象) *创建一个数组,也是要开辟一个堆...
    小晨的世界阅读 1,630评论 0 1
  • 一.关于数组 1.什么是数组 ①,数组的数据类型是Object,也就是说数组是对象。 ②,数组...
    印第安老斑鸠_333阅读 2,228评论 0 0