2017-08-31 17 views
0

カナダの郵便番号は次のとおりである:偽の郵便番号を生成

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) 

私はこのコードに満足していません。どのように私はそれを最適化することができますか?

+0

あなたはより具体的なことはできますか?あなたは何を改善したいですか? –

+0

アマチュアの仕事、またはこれは受け入れられますか?皆さんはどう思いますか? – Deano

答えて

1

これは少し短いです:

次の2つのアレイに到着し、アルファベットと数字の文字列から文字を選択すると、ランダムint型の発電機を使用することができると仮定すると

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>

+0

良い考え方、私はes6構文が大好き、ありがとうございます:) – Deano

+1

余分なes6の良さについては、配列を分解することができます:[letter1、letter2、letter3] = _x(3、()=> ...) ; –

+0

私はLodashを知らないけど、2つの配列を自動的に組み合わせることができるジッパーのマージ機能を持っているのだろうか? – nnnnnn

1

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); 
};