Подтвердить что ты не робот

Каковы полезные методы JavaScript, которые расширяют встроенные объекты?

Каковы ваши самые полезные, наиболее практичные методы, которые расширяют встроенные объекты JavaScript, такие как String, Array, Date, Boolean, Math и т.д.?

Строка

Массив

Дата

Примечание. Пожалуйста, отправьте один расширенный метод за каждый ответ.

4b9b3361

Ответ 1

Строка Заменить все:

String.prototype.replaceAll = function(search, replace)
{
    //if replace is not sent, return original string otherwise it will
    //replace search string with 'undefined'.
    if (replace === undefined) {
        return this.toString();
    }

    return this.replace(new RegExp('[' + search + ']', 'g'), replace);
};

var str = 'ABCADRAE';
alert(str.replaceAll('A','X')); // output : XBCXDRXE

Ответ 2

Здесь другая реализация метода String.replaceAll()

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

Разница между этим и размещенным решением здесь заключается в том, что эта реализация обрабатывает правильные регулярные выражения специальных символов в строках, а также позволяет сопоставлять слова

Ответ 3

Array.prototype.indexOf = Array.prototype.indexOf || function (item) {
    for (var i=0; i < this.length; i++) {
        if(this[i] === item) return i;
    }
    return -1;
};

Использование:

var list = ["my", "array", "contents"];
alert(list.indexOf("contents"));     // outputs 2

Ответ 4

Есть тонна функций String.prototype из Джеймса Падольси

https://github.com/padolsey/string.prototype

К ним относятся:

  • camelize
  • содержит
  • Количество
  • Вложите
  • экстракт
  • ForEach
  • forEachWord
  • linkify
  • много
  • Randomize
  • удалить
  • обратное
  • укоротить
  • рода
  • toDOM
  • отделка
  • обертка

Ответ 5

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

Ответ 6

// 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();
}

Ответ 7

Прокладка строк:

String.prototype.padLeft = function (length, character) { 
     return new Array(length - this.length + 1).join(character || ' ') + this; 
}
'trial'.padLeft(7, 'X'); // output : 'XXtrial'
'trial'.padLeft(7);      // output : '  trial'



String.prototype.padRight = function (length, character) { 
     return this + new Array(length - this.length + 1).join(character || ' '); 
}
'trial'.padRight(7, 'X'); // output : 'trialXX'
'trial'.padRight(7);      // output : 'trial  '

Ответ 8

PHP.JS - очень приятное усилие для переноса большинства функций PHP на JavaScript. В настоящее время у них очень впечатляющий список:

В сети: http://phpjs.org/functions/index

Ответ 9

Function.prototype.bind из библиотеки Prototype.

Аналогично call и apply, но позволяет вам возвращать ссылку на функцию, вызываемую в определенном контексте, вместо того, чтобы немедленно ее выполнять. Также позволяет выполнять карри параметры. Он настолько полезен, что стал частью ECMAScript 5 и уже реализуется изначально в браузерах.

Function.prototype.bind = function() {
  var __method = this, args = Array.prototype.slice.call(arguments), object = args.shift();
  return function() {
    var local_args = args.concat(Array.prototype.slice.call(arguments));
    if (this !== window) local_args.push(this);
    return __method.apply(object, local_args);
  }
}

Ответ 10

Различные прототипы обработки списка всегда велики. Поскольку вы хотите только один за сообщение, я просто отправлю foldl, который я обнаружил через SML (он "сворачивает" список, слева направо, он имеет счетчик в 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-методов от возврата истинных массивов делает многие из этих методов более бесполезными. И если вы используете какой-либо Lib, они часто определяют такие методы, как эти (map, filter, exists и т.д.).

Ответ 11

Date.toMidnight

Date.prototype.toMidnight = function(){ 
  this.setMinutes(0); 
  this.setSeconds(0); 
  this.setHours(0) 
}

Ответ 12

Массив содержит:

Array.prototype.contains = function(obj) {
    for (var i=0; i < this.length; i++) {
        if(this[i] === obj) return i;
    }
    return -1;
}

Использование:

var arr = [1, 2, 3];
alert(arr.contains(2));

Эта небольшая вспомогательная функция сообщает вам, содержит ли ваш массив объект. Если это так, возвращается индекс объекта, в противном случае возвращается -1.

Бесплатный совет в пятницу: никогда не изменяйте прототип объекта. Это было бы просто попросить целый мир боли - я усвоил это с трудом:)

Ответ 13

Здесь хорошее расширение для объекта Date, которое позволяет вам легко форматировать дату. Он использует синтаксис даты PHP, поэтому знакомые с PHP получат его в кратчайшие сроки. У других также есть огромный список возможных переключателей на сайте. Лично я не нашел более простой способ отформатировать даты в различных форматах.

Формат даты

Ответ 16

Эти два являются оболочками для вставки и удаления элементов из определенной позиции в массиве, потому что мне не нравится имя 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, чтобы уйти от использования индексов:

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.times

Подобно методу Ruby times для чисел, он принимает функцию и выполняет ее N раз, где N - это числовое значение.

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

Ответ 17

Используйте цепочку прототипов следующим образом:

String.prototype.AddWorld = function() { return this+'World' }

"Hello ".AddWorld(); // returns the string "Hello World"

Ответ 18

// 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;
};

Ответ 19

Есть хорошая статья в http://maiaco.com/articles/js/missingArrayFunctions.php, описывающая шесть полезных функций для добавления в прототип Array. Функции linearSearch (такие же, как indexOf, заданные в другом ответе), binarySearch, retainAll, removeAll, unique и addAll. В статье также содержится код JavaScript для каждой из шести функций и пример кода, показывающий, как их использовать.

Ответ 20

Это прототип функции для заглавной строки:

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

Ответ 21

Используйте что-то вроде underscore.js или для Angular используйте lodash.