【问题标题】:generate fake postal code生成假邮政编码
【发布时间】:2017-08-31 01:51:32
【问题描述】:

加拿大邮政编码如下:

L5R 1Y2 

我一直在玩 lodash 从字符串中选择随机元素,这就是我想出的。

num1 = _.sampleSize('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 1);

char1 = _.sampleSize('123456789', 1);

num2 = _.sampleSize('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 1);

char2 = _.sampleSize('123456789', 1);

num3 = _.sampleSize('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 1);

char3 = _.sampleSize('123456789', 1);

char4 = _.sampleSize('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 1);

console.log(char1,num1,char2 + ' ' + char3,num3,char4)

我对这段代码不满意,有什么建议可以优化它吗?

【问题讨论】:

  • 你能说得更具体点吗?你想改进什么?
  • 这么多重复的步骤,感觉像是业余工作,还是可以接受?大家觉得呢?

标签: javascript lodash


【解决方案1】:

这有点短:

let letters = _.times(3, () => _.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZ'));
let numbers = _.times(3, () => _.sample('123456789'));
console.log(`${letters[0]}${numbers[0]}${letters[1]} ${numbers[1]}${letters[2]}${numbers[2]}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

【讨论】:

  • 好主意,我喜欢 es6 语法更简洁,谢谢 :)
  • 对于额外的 es6 优点,您可以解构数组: let [ letter1, letter2, letter3 ] = _.times(3, () => ...);
  • 我不知道 Lodash,但它可能有某种拉链合并功能,可以自动合并两个数组吗?
  • @nnnnnn 确实如此,但我们仍然需要中间的空间。
【解决方案2】:

假设你可以使用一个随机的 int 生成器,从字母和数字的字符串中挑选字符,得到两个数组:

const arrayOfLetters = ["H", "H", "H"];
const arrayOfNumbers = ["0", "0", "0"];

交错的概念其实很简单:

const interleave = (arr1, arr2) =>
  Array.from({ length: arr1.length }) // or use Math.min or Math.max
    .map((_, i) => [arr1[i], arr2[i]])
    .reduce((a, b) => a.concat(b), []);

interleave(arrayOfLetters, arrayOfNumbers).join(""); // H0H0H0

交错任意数量的数组并不难。

从技术上讲,空格分隔不是规范的一部分(也可以看到用连字符分隔)。因此,如果您真的想包含它,或者为它包含空间,那么您可以执行以下操作:

const generateCanadianPostalCode = (separator = " ") => {
  const letters = generateLetters(3);
  const numbers = generateNumbers(3);
  const sequence = interleave(letters, numbers);
  const halves = [
    sequence.slice(0, 3).join(""),
    sequence.slice(3).join(""),
  ];
  return halves.join(separator);
};

【讨论】:

    猜你喜欢
    • 2016-04-02
    • 2020-01-27
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多