私が試したのは2日ですが、運がありません!笑
私の初心者の質問は
私はコンテナを持っています
var container = [1.29,1.30,1.20,1.21,1.95,4.19,1.53,4.11,1.06,84.64,0,23.1,1,22,1.22];
したがって、このコンテナの内部を調べて値をカウントするための高速なソリューションを見つける必要があります。2つのルールのみを尊重する必要があります。カウントする必要のある値が0の場合、コンテナ内に0がいくつあるかを正確に知る必要があります。値は0ではありません。この値以上のすべての値をカウントする必要があります
したがって、これを2つの方法で試しましたが、どちらの場合も、0の値に対して間違った結果が得られました。
function count(arr, value) {
if (arr.length === 1) {
return arr[0] === value ? 1 : 0;
} else {
if (value === 0) {
return (arr.shift() === value ? 1 : 0) + count(arr, value);
} else {
return (arr.shift() >= value ? 1 : 0) + count(arr, value);
}
}
}
console.log(count(container, 2));
console.log(count(container, 0));
私の期待は、2のすべての値> = 2とすべての値=== 0を見つけることですが、2の場合は正しい結果が得られ、0の場合は間違った結果が得られました。
同じ機能のこの2つのバリエーションと同じ
function isBigEnough(value) {
return function(element, index, array) {
if (value === 0) {
return (element = value);
} else {
return (element >= value);
}
}
}
function isBigEnough(value) {
if (value === 0) {
return function(element, index, array) {
return (element = value);
}
} else {
return function(element, index, array) {
return (element >= value);
}
}
}
0の値に対して0の結果を取得するたびに、コンテナーに1があります。
何か案が?そして、より速いアプローチは何ですか?
どうもありがとうございました。良い一日を。
filter
よりスマートなソリューションのためにメソッドを使用できます。
filter
メソッドは、配列内のすべてのアイテムに提供されたコールバック関数を適用することにより、新しい配列を作成します。
を使用している場合はES6
、arrow
関数を試してください。
var container = [1.29,1.30,1.20,1.21,1.95,4.19,1.53,4.11,1.06,84.64,0,23.1,1,22,1.22];
function count(arr, value) {
if(value==0)
return arr.filter(a=>a==0).length;
return arr.filter(a=>a>=value).length;
}
console.log(count(container, 2));
console.log(count(container, 0));
関数の何が問題になっていますか?
問題は、shift
メソッドが元の配列を変更することです。これが0
、値を0
指定して関数を呼び出したときに結果が得られる理由です。以下のスニペットをご覧ください。
var container = [1.29,1.30,1.20,1.21,1.95,4.19,1.53,4.11,1.06,84.64,0,23.1,1,22,1.22];
function count(arr, value) {
if (arr.length === 1) {
return arr[0] === value ? 1 : 0;
} else {
if (value === 0) {
return (arr.shift() === value ? 1 : 0) + count(arr, value);
} else {
return (arr.shift() >= value ? 1 : 0) + count(arr, value);
}
}
}
console.log(count(container, 2));
console.log(container);
console.log(count(container, 0));
これを解決するには、必要なたびにカウント関数を呼び出すためにコピーを使用する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加