esm.run lodash demo

HTML

<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
<body>test</body>

JavaScript

// See https://www.npmjs.com/package/lodash documentation.
console.log(_);


console.log('start');
// 字符集合大小
function run(len) {
	const ALL_CODE_COUNTS = 5;
  const result = {};
  let count = 0;
  // 把本次组合写进已有map,并把本次组合的相邻组合也一并写进去
  function setResult(indexes) {
    if (result[indexes.join('-')]) {
      return;
    }
    count++;
    for (const ind in indexes) {
      const newInds = _.clone(indexes);
      for (let i = 0; i < ALL_CODE_COUNTS; i++) {
        newInds[ind] = i;
        result[newInds.join('-')] = true;
      }
    }
  }
  // 权重数组,方便循环的时候拿出所有组合
  const indexesWeight = _.range(0, len).map((v) => ALL_CODE_COUNTS ** v);
 for (let i = 0; i < ALL_CODE_COUNTS ** len; i++) {
    const nowIndeses = indexesWeight.map((w) => parseInt((i / w)) % ALL_CODE_COUNTS);
    setResult(nowIndeses);
  }
  console.log(count);
}

run(3); // 19
run(4);// 89
run(5);// 421
run(6);// 2045