Что такое полезные методы JavaScript, который расширяет встроенные объекты? [закрытый]

Мелкие копии копируют как можно меньше. Мелкая копия набора является копией структуры набора, не элементами. С мелкой копией два набора теперь совместно используют отдельные элементы.

Глубокие копии копируют все. Глубокая копия набора является двумя наборами со всеми элементами в исходном дублированном наборе.

41
задан 7 revs, 2 users 49% 23 May 2017 в 12:26
поделиться

19 ответов

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

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

"Hello ".AddWorld(); // returns the string "Hello World"
0
ответ дан 27 November 2019 в 00:09
поделиться
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
16
ответ дан 27 November 2019 в 00:09
поделиться

Заполнение строки:

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  '
5
ответ дан 27 November 2019 в 00:09
поделиться

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

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.

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

1
ответ дан 27 November 2019 в 00:09
поделиться

String Replace All:

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
40
ответ дан 27 November 2019 в 00:09
поделиться

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

Формат даты

1
ответ дан 27 November 2019 в 00:09
поделиться

Различные прототипы манипуляции со списками всегда хороши. Поскольку вам нужно только одно сообщение, я просто отправлю 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 возвращать истинные массивы делает многие из этих методов бесполезными. И если вы используете какую-либо библиотеку, они часто уже определяют такие методы (карта, фильтр, существует и т. Д.).

2
ответ дан 27 November 2019 в 00:09
поделиться

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

Онлайн по адресу: http://phpjs.org/functions/index

3
ответ дан 27 November 2019 в 00:09
поделиться
// 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
ответ дан 27 November 2019 в 00:09
поделиться

Существует множество функций String.prototype от Джеймса Падолси

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

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

  • camelize
  • содержит
  • count
  • enclose
  • extract
  • forEach
  • forEachWord
  • linkify
  • many
  • randomize
  • remove
  • reverse
  • сокращение
  • sort
  • toDOM
  • trim
  • wrap
8
ответ дан 27 November 2019 в 00:09
поделиться

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
8
ответ дан 27 November 2019 в 00:09
поделиться

Вот еще одна реализация метода String.replaceAll ()

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

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

38
ответ дан 27 November 2019 в 00:09
поделиться

Date.toMidnight

Date.prototype.toMidnight = function(){ 
  this.setMinutes(0); 
  this.setSeconds(0); 
  this.setHours(0) 
}
1
ответ дан 27 November 2019 в 00:09
поделиться

Я несколько раз использовал функцию Array.Map, описанную Скоттом Куном.

http://www.lazycoder.com/weblog/2009/08/12/a-simple-map-function-for-plain-javascript-arrays/

Array.prototype.map = function(fn) {
    var r = [];
    var l = this.length;
    for(i=0;i<l;i++)
    {
        r.push(fn(this[i]));
    }
    return r; 
};
1
ответ дан 27 November 2019 в 00:09
поделиться
// 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;
};
0
ответ дан 27 November 2019 в 00:09
поделиться

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

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

// logs hello 5 times
(5).times(function() {
    console.log("hello");
});
1
ответ дан 27 November 2019 в 00:09
поделиться

Function.prototype.bind из библиотеки прототипов.

Подобно 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);
  }
}
3
ответ дан 27 November 2019 в 00:09
поделиться

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

0
ответ дан 27 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: