組み込みオブジェクトを拡張する便利なJavaScriptメソッドは何ですか?


Answers

String.replaceAll()メソッドの別の実装

String.prototype.replaceAll = function(search, replace) {
    if (replace === undefined) {
        return this.toString();
    }
    return this.split(search).join(replace);
}

この1つとソリューションの違いは、この実装では文字列内の正規表現の特殊文字を正しく処理し、単語マッチングが可能になることです

Question

String、Array、Date、Boolean、MathなどのビルトインJavaScriptオブジェクトを拡張する最も有用で実用的なメソッドは何ですか?

文字列

アレイ

日付

注:回答ごとに1つの拡張メソッドを投稿してください。




これは文字列を大文字にするプロトタイプ関数です:

String.prototype.capitalize = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}



ここでは、Dateオブジェクトの素晴らしい拡張機能を使用して、日付を非常に簡単にフォーマットすることができます。 これはPHPの日付構文を使用しているので、PHPに精通している人はすぐにそれを取得します。 他の人は、サイト上に可能なスイッチの巨大なリストも持っています。 個人的には、日付をさまざまな形式にフォーマットする簡単な方法が見つかりませんでした。

日付形式




さまざまなリスト操作プロトタイプは常に優れています。 1つのポストで1つだけを望むので、私はSMLを介して発見したfoldlポストします(リストを左から右に折りたたむ、もちろんfoldrもカウンターパートがあります)。

Array.prototype.foldl = function(fnc,start) {
    var a = start;
    for (var i = 0; i < this.length; i++) {
        a = fnc(this[i],a);
    }
    return a;
}

いくつかの簡単な例があります:

var l = ["hello" , "world"];
l.foldl(function(i, acc) { return acc+" "+i; }, "") // => returns "hello world"

残念なことに、標準的なDOMメソッドが真の配列を返すことに失敗すると、これらのメソッドの多くはむしろ役に立たなくなります。 また、ある種のライブラリを使用している場合は、既にマップされているメソッド(フィルタ、存在するものなど)を定義することがよくあります。




PHP.JSは、ほとんどのPHP関数をJavaScriptに移植するのに非常に便利です。 彼らは現在、非常に印象的なリストを持っています:

オンライン: http : //phpjs.org/functions/index




// This replaces all instances of 'from' to 'to' even when
// 'from' and 'to' are similar (i.e .replaceAll('a', 'a '))
String.prototype.replaceAll = function(from, to) {
    var k = this;
    var i = 0;
    var j = from.length;
    var l = to.length;

    while (i <= k.length)
        if (k.substring(i, i + j) == from) {
        k = k.substring(0, i) + k.substring(i).replace(from, to);
        i += l;
    }
    else
        i++;

    return k;
};



String.format

String.prototype.format = function (values) {

    var regex = /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g;

    var getValue = function (key) {
            if (values == null || typeof values === 'undefined') return null;

            var value = values[key];
            var type = typeof value;

            return type === 'string' || type === 'number' ? value : null;
        };

    return this.replace(regex, function (match) {
        //match will look like {sample-match}
        //key will be 'sample-match';
        var key = match.substr(1, match.length - 2);

        var value = getValue(key);

        return value != null ? value : match;
    });
};

使用法:

alert('Program: {key1} {key2}'.format({ 'key1' : 'Hello', 'key2' : 'World' })); //alerts Program: hello world



これらの2つは、 spliceという名前が好きではないため、配列の特定の位置から要素を挿入したり削除したりするためのラッパーです。

// insert element at index
Array.prototype.insertAt = function(element, index) {
    this.splice(index, 0, element);
}

// delete element from index
Array.prototype.removeAt = function(index) {
    this.splice(index, 1);
}

インデックスを使用しないようにする便利な配列メソッド

Array.prototype.first = function() {
    return this[0] || undefined;
};

Array.prototype.last = function() {
    if(this.length > 0) {
        return this[this.length - 1];
    }
    return undefined;
};

Array.prototype.max = function(array){
    return Math.max.apply(Math, array);
};

Array.prototype.min = function(array){
    return Math.min.apply(Math, array);
};

MooToolsライブラリの便利な機能:

Function.delay

指定されたミリ秒が経過した後に関数を実行するために使用されます。

// alerts "hello" after 2 seconds.
(function() {
    alert("hello");
}).delay(2000);    

Number×

数のRubyのtimesメソッドと同様に、これは関数を受け取り、Nを数値としてN回実行します。

// logs hello 5 times
(5).times(function() {
    console.log("hello");
});






// left trim
String.prototype.ltrim = function () {
    return this.replace(/^\s+/, '');
}

// right trim
String.prototype.rtrim = function () {
    return this.replace(/\s+$/, '');
}

// left and right trim
String.prototype.trim = function () {
    return this.ltrim().rtrim();
}