本のjs面接試験問題
6577 ワード
すべての起源まず、リンク先のリンク それから、テーマです. です.
javscript関数fnを作成します.この関数は、ランダムで反復しないn個の整数であり、整数の取得範囲は[2,32]であるパラメータn(デジタルタイプ)があります.最後に、まず自分で書きます.問題をよく読んで、問題をよく調べてください. 私の最初のコード
問題の再審&題意分析によってもたらされるfnのパラメータnは、正の整数でなければならない.すなわち、他のタイプの値ではなく、 .出力タイプは配列であり、ランダムであり、重複できない です.
じゃ、私の問題は強調されました.じゃ、修正してください.
タイトルを見ても、今は自慢話ではないと分かりました.また原文を見て、いくつかの問題があります.は入力されたn値を検査していません.重複がないとnの値は最大値、つまり乱数が発生する範囲の差を と加算しなければなりません.論理とデータの分離ができていません.つまり、乱数の範囲を変更する必要があるなら、このコードは多くのところで修正が必要です.これは小さな関数です.巨大なプロジェクトなら、結果は想像に耐えません. 詳しい注釈が不足しています.これは他の人の読解に役立ちません. はもともと存在していたデータ構造を利用できません.例えば、jsを過ぎると typeof判定データタイプ 補足:データタイプ:undefined、object(Nullを含む)、bollan、number、string、smbol、function Math.randowm().ランダム発生[0,1]間の乱数 Math.flor().下に整えて、つまり1.7=>1、-2.3=>-3 補足:Math.ceeir()上向きに整理する 補足:Math.round()四捨五入 Set()は、重複していないデータを記憶するために使用される .
反省する私のjsの良いごみの コードを書く前に、詳細な需要分析を行う必要があります. 入力値に対して、十分に細かいと判断する必要があります. 論理とデータ分離が重要です. 詳細な注釈を書く必要があります. できるだけ既存のツールを使って、車輪を繰り返さないでください.やむを得ない限り、
javscript関数fnを作成します.この関数は、ランダムで反復しないn個の整数であり、整数の取得範囲は[2,32]であるパラメータn(デジタルタイプ)があります.
let fn = function (n) {
if ( n < 0) {
return null;
} else {
let num = [];
let i;
for(i = 0; i < n; i++) {
num[i] =(Math.random() * 31 ) + 2;
}
return num;
}
};
もちろん不合格ですよ!!問題の再審&題意分析
number
タイプでなければならない.ゼロより大きい.小数点を持たない値じゃ、私の問題は強調されました.じゃ、修正してください.
let fn = function(n) {
/*
* ,
*/
if (n < 0 || typeof n !== 'number' || n % 1 !== 0) {
return null;
} else {
let num = [];
let i;
let j;
let tmp;
let flag = 0;
/*
* ,
* 'i = i - flag + 1' :
* flag 1 ,
* i , ,
*/
for (i = 0; i < n; i = i - flag + 1) {
flag = 0;
tmp = Math.floor((Math.random() * 31) + 2);
if (i !== 0) {
for (j = 0; j <= i; j++) {
if (num[j] === tmp) {
flag = 1;
break;
}
}
}
if (flag === 0)
num[i] = tmp;
}
return num;
}
};
焼き戻しタイトルを見ても、今は自慢話ではないと分かりました.また原文を見て、いくつかの問題があります.
set
というデータ構造があります.その中に入れた値は重複できません.そうすると、人工的な判断の面倒を回避して、もっと優雅になります. /**
* : , [2, 32]
*
* @param : [number] n
* @return: [array] n , n ,
*/
let fn = function (n) {
// n ,
if (n < 0 || typeof n !== 'number' || n % 1 !== 0) {
return [];
} else {
//
let minRange = 2;
let maxRange = 32;
// Set
let num = new Set();
let length = maxRange - minRange + 1;
//n ,
if( n > length) {
return [];
}
while(num.size < n) {
// Set
num.add(Math.floor((Math.random() * length) + minRange));
}
// Set Array
return Array.from(num);
}
};
使用済みの知識反省する