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