Array .min() /.max()

どうあるべきか。

by ethertank

JavaScript

Array.prototype.min || (Array.prototype.min = function() {
    return this.length ? Math.min.apply("",this) : undefined;
});
/* check result *//*
[1, 2, 3, 0].min() ====> 0
typeof[1, 2, 3, 0].min() ====> number
[1, 2, 3, +100].min() ====> 1
typeof[1, 2, 3, +100].min() ====> number
["1", "2", "3", "+100"].min() ====> 1
typeof["1", "2", "3", "+1"].min() ====> number
[].min() + ", " + typeof[].min() ====> undefined
typeof[].min() ====> undefined
[[1, 2, 3], [4, 5, 6]].min() ====> NaN

割と自然な結果。多次元配列はNG(対象外としても良いか?)
*/




/*
Array.prototype.min || (Array.prototype.min = function() {
    return this.sort(function(a,b){return a < b;}).pop();
});
*/
/* check result *//*
[1, 2, 3, 0].min() ====> 0
typeof[1, 2, 3, 0].min() ====> number
[1, 2, 3, +100].min() ====> 1
typeof[1, 2, 3, +100].min() ====> number
["1", "2", "3", "+100"].min() ====> +100
typeof["1", "2", "3", "+1"].min() ====> string
[].min() + ", " + typeof[].min() ====> undefined
typeof[].min() ====> undefined
[[1, 2, 3], [4, 5, 6]].min() ====> 1,2,3

「+100」 の 「+」記号をsortの評価対象としてる故、他の数値よりこれが小さいとなる。多次元配列も同様にNG
*/




/*
Array.prototype.min || (Array.prototype.min = function() {
    if(!this.length) return;

    var res = this[0],
        i = 0,
        l = this.length;
    
    for (; i < l; ++i) {
        if (this[i] < res) res = this[i];
    }
    return res;
});
*/
/* check result *//*
[1, 2, 3, 0].min() ====> 0
typeof[1, 2, 3, 0].min() ====> number
[1, 2, 3, +100].min() ====> 1
typeof[1, 2, 3, +100].min() ====> number
["1", "2", "3", "+100"].min() ====> +100
typeof["1", "2", "3", "+1"].min() ====> string
[].min() + ", " + typeof[].min() ====> undefined
typeof[].min() ====> undefined
[[1, 2, 3], [4, 5, 6]].min() ====> 1,2,3
NG。但しfor文を使用すれば内部で記号付き数文字列、-Infinity 等のチェックが可能
*/




/*
Array.prototype.min || (Array.prototype.min = function() {
    //どの様に在るべきか?
});
*/




// checker
var arrayEcho = function(a) {
    for (var i = 0, l = a.length; i < l; ++i) {
        document.write(a[i] + "<br />");
    }
}, s = "...