diff --git a/src/main.ts b/src/main.ts index a73e164..22e1b47 100644 --- a/src/main.ts +++ b/src/main.ts @@ -74,10 +74,10 @@ app.innerHTML = ` 显影 - 14% + 15% 留下多少原文词语 - + diff --git a/src/mosaic.test.ts b/src/mosaic.test.ts index 9f780b7..82627a6 100644 --- a/src/mosaic.test.ts +++ b/src/mosaic.test.ts @@ -36,6 +36,14 @@ describe('selectKeywords', () => { expect(candidates.some((candidate) => candidate.selected)).toBe(true) }) + + it('显影 0% 不保留词语,100% 保留全部候选词', () => { + const hidden = selectKeywords(SOURCE, 0, 1) + const revealed = selectKeywords(SOURCE, 100, 1) + + expect(hidden.some((candidate) => candidate.selected)).toBe(false) + expect(revealed.every((candidate) => candidate.selected)).toBe(true) + }) }) describe('generateMosaic', () => { diff --git a/src/mosaic.ts b/src/mosaic.ts index 113490e..dcce973 100644 --- a/src/mosaic.ts +++ b/src/mosaic.ts @@ -345,13 +345,13 @@ export function selectKeywords( return candidates } - const desiredCount = Math.min( - candidates.length, - Math.max( - candidates.length >= 4 ? 2 : 1, - Math.round(candidates.length * (retention / 100)), - ), - ) + const desiredCount = + retention <= 0 + ? 0 + : Math.min( + candidates.length, + Math.max(1, Math.ceil(candidates.length * (retention / 100))), + ) const ranked = [...candidates].sort( (left, right) => right.score - left.score || left.start - right.start, )