ゼロを除いて、数字のリストから最小の数字を見つける必要があります。
それを行う内部機能はありますか?または、使用する前にリストからゼロを削除する必要がありMath.min
ますか?
例:
入力:、、、、、、、、213
_ 0
_ 32
_ 92
_0
2992
39
結果:32
[更新]可能であれば、入力を引数として受け取る関数のコードを提供してください。nonZeroMin(213, 0, 32, 92, 0, 2992, 39)
ゼロを除いて、数字のリストから最小の数字を見つける必要があります。
それを行う内部機能はありますか?または、使用する前にリストからゼロを削除する必要がありMath.min
ますか?
例:
入力:、、、、、、、、213
_ 0
_ 32
_ 92
_0
2992
39
結果:32
[更新]可能であれば、入力を引数として受け取る関数のコードを提供してください。nonZeroMin(213, 0, 32, 92, 0, 2992, 39)
コード/解決策:
var arr = [3, 0, 7, 12, 0, 5, 22];
var minValue = Math.min.apply(null, arr.filter(Boolean));
使い方:
arr.filter
指定された関数によって実装されたテストに合格したすべての要素を含む新しい配列を作成します。したがって、上記のコードでは、配列の各値がテストされますBoolean(value)
Boolean(3) // true
Boolean(0) // false
Boolean(7) // true
// ...
その結果、ゼロ以外のすべての要素を持つ新しいフィルター処理された配列が作成されます。
次にMath.min.apply(null, ...)
、そのような配列で最小値を見つけます。
null
この場合はコンテキストです。null
, this
, - 結果はMath
同じです。
var arr = [213, 0, 32, 92, 0, 2992, 39];
var min = arr.filter(function (x) { return x !== 0; })
.reduce(function (a, b) { return Math.min(a, b); }, Infinity);
alert(min); // => 32
filter
とreduce
は、 への EcmaScript 5 の追加ですArray
が、古いブラウザでこれを実行する必要がある場合に備えて、それらのコードMDN
を提供します。
編集:これは、var-args スタイル関数で機能するより短い方法です。
function minNonZero(var_args) {
return Array.prototype.reduce.call(arguments, function (prev, current) {
return prev && current ? Math.min(prev, current) : prev || current;
});
}
alert(minNonZero(213, 0, 32, 92, 0, 2992, 39));
ゼロ以外の正の数をフィルタリングして、配列を並べ替えることができます。
list.filter(function(x){
return x> 0;
}).sort(function(a,b){
return a>b;
})[0];
引数の数が不明な関数を作成したい場合は、arguments
その関数の内部から使用できます。
ゼロ以外の最小の数値を見つけるには、配列をソートし、ゼロ(および非数値)を最後までソートします。
function nonZeroMin(){
var args = Array.prototype.slice.call(arguments);
args.sort(function(a, b){
if(a === null || isNaN(a) || a === 0) return 1;
if(b === null || isNaN(b) || b === 0) return -1
return a-b;
});
return args[0];
}
次に、次のことができますnonZeroMin(213, 0, 32, 92, 0, 2992, 39)
。
次のように、ゼロを削除してから を使用する必要がありますMath.min
。
function nonZeroMin() { // input can be as many parameters as you want
var args = Array.prototype.slice.call(arguments);
for(var i = args.length-1; i>=0; i--) {
if(args[i] == 0) args.splice(i, 1);
}
return Math.min.apply(null,args);
}
更新された質問に従って入力パラメーターを許可するように編集されました。