Введение в Лодаш
Lodash — это согласованная модульная высокопроизводительная служебная библиотека JavaScript.
Lodash выпущен под лицензией MIT с открытым исходным кодом и поддерживает новейшую среду выполнения. Ознакомьтесь с различиями между отдельными версиями сборки и выберите ту, которая подходит именно вам.
Это примечание является широко используемым методом записи, некоторые из которых могут быть реализованы в ES6, а те, которые не очень важны, были пропущены и отфильтрованы для записи документов для личного использования.
Адрес документа личной заметки:волосы на ногах 233.git ee.IO/hair-blog/no…
Установить
Среда браузера:
<script src="lodash.js"></script>
через нпм:
$ npm i -g npm
$ npm i --save lodash
Node.js:
// Load the full build.
var _ = require('lodash');
// Load the core build.
var _ = require('lodash/core');
// Load the FP build for immutable auto-curried iteratee-first data-last methods.
var fp = require('lodash/fp');
// Load method categories.
var array = require('lodash/array');
var object = require('lodash/fp/object');
// Cherry-pick methods for smaller browserify/rollup/webpack bundles.
var at = require('lodash/at');
var curryN = require('lodash/fp/curryN');
Почему Лодаш?
Lodash упрощает JavaScript, упрощая работу с массивами, числами, объектами, строками и многим другим. Модульный подход Lodash отлично подходит для:
- Обход массива, объекта и строки
- Управление и обнаружение значений
- Создайте функцию, которая соответствует функции
Дополнительные инструменты
- futil-jsпредставляет собой набор утилит, дополняющих lodash.
Методы класса массива
Разделение массива (чанк)
Разделить массив (массив) на несколькоsizeкуски длины и сгруппируйте эти куски в новый массив. еслиarrayнельзя разделить на все блоки одинаковой длины, то последние оставшиеся элементы образуют блок.
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
Отфильтровать неверные значения (компактный)
Создает новый массив, содержащий все неложные элементы исходного массива. Напримерfalse, null,0, "", undefined, а такжеNaNсчитаются «ложными значениями».
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
Значения объединяются массивами (concat)
Создайте новый массив,arrayОбъединено с любым массивом или значением.
var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
console.log(other);
// => [1, 2, 3, [4]]
console.log(array);
// => [1]
значения массива фильтров (разница)
создать уникальныйarrayМассив значений, каждое из которых не содержится в другом заданном массиве.
_.difference([3, 2, 1], [4, 2]);
// => [3, 1]
получить принять одинiteratee(примечание: итератор), вызовarrayа такжеvaluesКаждый элемент в сравнении дает значение.
_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
// => [3.1, 1.3]
// The `_.property` iteratee shorthand.
_.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
// => [{ 'x': 2 }]
Принятcomparator(Примечание: компаратор), вызов сравненияarray,valuesэлементы в . Результирующее значение выбирается из первого массива.
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
// => [{ 'x': 2, 'y': 1 }]
Нарезка массива (удаление)
Создать нарезанный массив, удалитьarrayпереднийnЭлемент. (nЗначение по умолчанию — 1. )
_.drop([1, 2, 3]);
// => [2, 3]
_.drop([1, 2, 3], 2);
// => [3]
_.drop([1, 2, 3], 5);
// => []
_.drop([1, 2, 3], 0);
// => [1, 2, 3]
Создать нарезанный массив, удалитьarrayхвостикnэлементы. (nЗначение по умолчанию — 1. )
_.dropRight([1, 2, 3]);
// => [1, 2]
_.dropRight([1, 2, 3], 2);
// => [1]
_.dropRight([1, 2, 3], 5);
// => []
_.dropRight([1, 2, 3], 0);
// => [1, 2, 3]
Заполнение массива (заполнение)
использоватьvalueзначение для заполнения (замены)array,отstartположение начинается, чтобыendendМесто нахождения).
var array = [1, 2, 3];
_.fill(array, 'a');
console.log(array);
// => ['a', 'a', 'a']
Альтернативный метод (array.fill)
var array = [1, 2, 3].fill('a')
console.log(array);
// => ['a', 'a', 'a']
Уменьшение размерности массива (сведение)
уменьшить на один уровеньarrayГлубина вложения.
_.flatten([1, [2, [3, [4]], 5]]);
// => [1, 2, [3, [4]], 5]
БудуarrayРегенерация представляет собой одномерный массив.
_.flattenDeep([1, [2, [3, [4]], 5]]);
// => [1, 2, 3, 4, 5]
согласно сdepthрекурсивная редукцияarrayуровень вложенности
var array = [1, [2, [3, [4]], 5]];
_.flattenDepth(array, 1);
// => [1, 2, [3, [4]], 5]
_.flattenDepth(array, 2);
// => [1, 2, 3, [4], 5]
Альтернативы (плоская или плоская карта)
// flat: 将多维数组转换为低维数组
const arr = [1, 2, 3, 4, [5, 6, [7, 8, 9]]]
// 参数为转换深度, 是一个数字
console.log(arr.flat(2))
// flatMap: 遍历如果返回的是多维数组, 转换为低维数组
const arr = [1,2,3,4]
const result = arr.flatMap(item=> [item*10])
Преобразование 2D-массива в объект (fromPairs)
Возвращает пару ключ-значение на основе двумерного массиваpairsсоставленный объект.
_.fromPairs([['fred', 30], ['barney', 40]]);
// => { 'fred': 30, 'barney': 40 }
Альтернативы (Object.fromEntries)
const result = Object.fromEntries([
['name', '尚硅谷'],
['xueke', 'Java,大数据,前端,云计算']
])
console.log(result) // 0> {name:xueke, 尚硅谷:Java...}
const m = new Map()
m.set('name', 'ATGUIGU')
const result2 = Object.fromEntries(m)
console.log(result2) // -> name:ATGUIGU
// Object.entries (ES8)
const arr = Object.entries({
name: '尚硅谷'
})
console.log(arr)
Уникальный массив сравнения равенства (пересечение)
Создайте массив уникальных значений, содержащий все элементы заданного массива, используяSameValueZeroДелайте сравнения на равенство. (Примечание: это можно понимать как пересечение заданного массива)
_.intersection([2, 1], [4, 2], [1, 2]);
// => [2]
Удалить указанное значение элемента (pull)
удалить массивarrayВсе элементы в которых равны заданному значению, используйтеSameValueZeroПроизводятся конгруэнтные сравнения.
var array = [1, 2, 3, 1, 2, 3];
_.pull(array, 2, 3);
console.log(array);
// => [1, 1]
Этот метод аналогичен_.pull, разница в том, что этот метод принимает массив значений для удаления.
var array = [1, 2, 3, 1, 2, 3];
_.pullAll(array, [2, 3]);
console.log(array);
// => [1, 1]
Удалить элементы по индексу (pullAt)
по индексуindexes, Удалитьarrayи возвращает массив удаленных элементов.
var array = [5, 10, 15, 20];
var evens = _.pullAt(array, 1, 3);
console.log(array);
// => [5, 15]
console.log(evens);
// => [10, 20]
Альтернатива (array.splice)
Сортировка и дедупликация (sortedUniq)
Этот метод аналогичен_.uniq, за исключением того, что он оптимизирует отсортированные массивы.
_.sortedUniq([1, 1, 2]);
// => [1, 2]
Дедупликация массива (uniq)
После создания дедупликацииarrayКопия массива. использовалSameValueZeroПроведите сравнение эквивалентности. Будет сохранено только первое вхождение элемента.
_.uniq([2, 1, 2]);
// => [2, 1]
Методы класса коллекции
Проверьте, верны ли оба (каждый)
пройти черезpredicate(функция утверждения) проверитьcollection(коллекция) ввсеВсе ли элементы возвращают true. однаждыpredicate(Функция утверждения) Возвращает false, и итерация немедленно останавливается.predicate(функция утверждения) вызывается с тремя аргументами:(value, index|key, collection).
_.every([true, 1, null, 'yes'], Boolean);
// => false
var users = [
{ 'user': 'barney', 'age': 36, 'active': false },
{ 'user': 'fred', 'age': 40, 'active': false }
];
// The `_.matches` iteratee shorthand.
_.every(users, { 'user': 'barney', 'active': false });
// => false
// The `_.matchesProperty` iteratee shorthand.
_.every(users, ['active', false]);
// => true
// The `_.property` iteratee shorthand.
_.every(users, 'active');
// => false
набор фильтров
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.filter(users, function(o) { return !o.active; });
// => objects for ['fred']
Коллекция обхода (Foreach)
_([1, 2]).forEach(function(value) {
console.log(value);
});
// => Logs `1` then `2`.
_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
console.log(key);
});
// => Logs 'a' then 'b' (iteration order is not guaranteed).
Проверить, существует ли элемент (включает)
экзаменvalue(значение) находится вcollection(коллекция). еслиcollection(set) - это строка, затем проверьтеvalue(значение, подстрока) находится в строке, иначе используйтеSameValueZeroПроведите сравнение эквивалентности. Если указаноfromIndexотрицательно, то изcollectionконец (коллекции), чтобы начать поиск.
_.includes([1, 2, 3], 1);
// => true
_.includes([1, 2, 3], 1, 2);
// => false
_.includes({ 'user': 'fred', 'age': 40 }, 'fred');
// => true
_.includes('pebbles', 'eb');
// => true
Пройдите и верните карту (карту)
Создает массив, где значение — это результат, возвращаемый объектом итерации после повторения каждого элемента в коллекции. iteratee (итеративная функция) вызывается с 3 аргументами: (значение, индекс|ключ, коллекция).
function square(n) {
return n * n;
}
_.map([4, 8], square);
// => [16, 64]
_.map({ 'a': 4, 'b': 8 }, square);
// => [16, 64] (iteration order is not guaranteed)
var users = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];
// The `_.property` iteratee shorthand.
_.map(users, 'user');
// => ['barney', 'fred']
Статистика обхода и возврата (уменьшение)
компрессияcollection(коллекция) как ценность, черезiteratee(итеративная функция) ходcollection(коллекция) для каждого элемента значение, возвращаемое каждый раз, будет использоваться в качестве следующей итерации (Примечание: какiteratee(итеративная функция) используется в качестве первого аргумента). если не предусмотреноaccumulator,ноcollectionПервый элемент в (коллекции) используется как начальное значение. (Примечание:accumulatorПараметры используются на первой итерации какiteratee(Итеративная функция) Используется первый параметр. ) iteratee вызывается с 4 аргументами:(accumulator, value, index|key, collection).
_.reduce([1, 2], function(sum, n) {
return sum + n;
}, 0);
// => 3
_.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
(result[value] || (result[value] = [])).push(key);
return result;
}, {});
// => { '1': ['a', 'c'], '2': ['b'] } (无法保证遍历的顺序)
Возвращает случайное значение элемента (образец)
отcollection(коллекция), чтобы получить случайный элемент.
_.sample([1, 2, 3, 4]);
// => 2
Перемешать порядок элементов (Shuffle)
创建一个被打乱值的集合。 использоватьFisher-Yates shuffleВерсия.
_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]
Возвращает длину коллекции (размер)
вернутьcollectionДлина (коллекции), если коллекция является массивом или строкой, возвращает ее длину; если коллекция является объектом, возвращает количество ее перечислимых свойств.
_.size([1, 2, 3]);
// => 3
_.size({ 'a': 1, 'b': 2 });
// => 2
_.size('pebbles');
// => 7
метод функционального класса
Ограничение: звонить после n раз (после)
_.beforeОбратная функция; этот метод создает функцию, когда он вызываетсяnИли более раз будет вызван после большего количестваfunc.
var saves = ['profile', 'settings'];
var done = _.after(saves.length, function() {
console.log('done saving!');
});
_.forEach(saves, function(type) {
asyncSave({ 'type': type, 'complete': done });
});
предельный параметр (арочный)
создать звонокfuncФункция. передачаfuncпринято не болееnпараметры, дополнительные параметры игнорируются.
_.map(['6', '8', '10'], _.ary(parseInt, 1));
// => [6, 8, 10]
Ограничение: не звоните (раньше) после более чем n раз
создать звонокfuncфункция, поthisПривязка и создание вызовов параметров к функциямfunc, количество обращений не превышаетnВторосортный. Вызов этой функции позже вернет последний вызовfuncрезультат.
jQuery(element).on('click', _.before(5, addContactToList));
// => 允许将最多4个联系人添加到列表中
Аргумент возвращает результат или функцию (карри)
Создать функцию, которая получаетfuncпараметры, либо вызовfuncрезультат возвращается, еслиfuncЕсли требуемые параметры были предоставлены, вернитесь напрямуюfuncрезультат выполнения. или вернуть функцию, которая принимает остальныеfuncПараметры функции, которые вы можете использоватьfunc.lengthКоличество параметров, необходимых для накопления.
var abc = function(a, b, c) {
return [a, b, c];
};
var curried = _.curry(abc);
curried(1)(2)(3);
// => [1, 2, 3]
curried(1, 2)(3);
// => [1, 2, 3]
curried(1, 2, 3);
// => [1, 2, 3]
// Curried with placeholders.
curried(1)(_, 3)(2);
// => [1, 2, 3]
Функция защиты от джиттера (Debounce)
Создайте debounced (дебаунсированную) функцию, которая будет задерживаться с момента последнего вызоваwaitВызывается через миллисекундыfuncметод. Функция устранения дребезга обеспечиваетcancelМетод отменяет вызов функции задержки иflushметод вызывается немедленно. Объект параметров может быть предоставлен, чтобы решить, как вызыватьfuncметод,options.leadingс |илиoptions.trailingРешите, как срабатывать до и после задержки (примечание: сначала звонить, а затем ждать или ждать, а затем звонить).funcВызывается с последним параметром, предоставленным функции debounce. Возврат дебаунцированной (debounced) функции последующих вызовов происходит в последний разfuncрезультат звонка.
// 避免窗口在变动时出现昂贵的计算开销。
jQuery(window).on('resize', _.debounce(calculateLayout, 150));
// 当点击时 `sendMail` 随后就被调用。
jQuery(element).on('click', _.debounce(sendMail, 300, {
'leading': true,
'trailing': false
}));
// 确保 `batchLog` 调用1次之后,1秒内会被触发。
var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
var source = new EventSource('/stream');
jQuery(source).on('message', debounced);
// 取消一个 trailing 的防抖动调用
jQuery(window).on('popstate', debounced.cancel);
Квалификация: после того, как стек опустошен (отсюда)
отложить вызовfunc, пока текущий стек не будет очищен. При вызове любые дополнительные параметры передаются вfunc.
_.defer(function(text) {
console.log(text);
}, 'deferred');
// => 一毫秒或更久一些输出 'deferred'。
Кэшировать возвращенный контент (memoize)
создать кешfuncфункция результата. если предусмотреноresolver, используйте возвращаемое значение распознавателя в результате функции кэширования ключей. По умолчанию первый параметр используется как ключ кэша.funcПри звонкеthisбудет привязан к функции кеша.
var object = { 'a': 1, 'b': 2 };
var other = { 'c': 3, 'd': 4 };
var values = _.memoize(_.values);
values(object);
// => [1, 2]
values(other);
// => [3, 4]
object.a = 2;
values(object);
// => [1, 2]
// 修改结果缓存。
values.cache.set(object, ['a', 'b']);
values(object);
// => ['a', 'b']
// 替换 `_.memoize.Cache`。
_.memoize.Cache = WeakMap;
Отрицать результат функции (negate)
Создайте функцию для утвержденияfuncФункция, которая инвертирует результат.funcКогда вызывается функция утверждения,thisПривяжите к созданной функции и передайте соответствующие параметры.
function isEven(n) {
return n % 2 == 0;
}
_.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
// => [1, 3, 5]
Звонить только один раз (ONCE)
Создать вызов, который может быть толькоfuncодноразовая функция. Повторные вызовы возвращают результат первого вызова.funcКогда звонили,thisПривяжите к созданной функции и передайте соответствующие параметры.
var initialize = _.once(createApplication);
initialize();
initialize();
// `initialize` 只能调用 `createApplication` 一次。
Функция частотного дросселя (дроссель)
Создайте функцию регулирования, которая выполняется не более секунд ожидания.funcодноразовая функция. Эта функция предоставляетcancelметоды отмены отложенных вызовов функций иflushметод вызывается немедленно. Вы можете предоставить объект параметров, чтобы решить, как вызыватьfuncМетоды options.leading и | или options.trailing определяют, как запускается ожидание до и после.funcВ эту функцию будет передан последний переданный параметр. Последующие вызовы функции return являются последними.funcрезультат звонка.
// 避免在滚动时过分的更新定位
jQuery(window).on('scroll', _.throttle(updatePosition, 100));
// 点击后就调用 `renewToken`,但5分钟内超过1次。
var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
jQuery(element).on('click', throttled);
// 取消一个 trailing 的节流调用。
jQuery(window).on('popstate', throttled.cancel);
методы языкового класса
литой массив (Castarrie)
еслиvalueне является массивом, затем приведите к массиву.
_.castArray(1);
// => [1]
_.castArray({ 'a': 1 });
// => [{ 'a': 1 }]
_.castArray('abc');
// => ['abc']
_.castArray(null);
// => [null]
_.castArray(undefined);
// => [undefined]
_.castArray();
// => []
var array = [1, 2, 3];
console.log(_.castArray(array) === array);
// => true
Мелкая цифровая копия (клон)
Создаватьvalueмелкая копия.
var objects = [{ 'a': 1 }, { 'b': 2 }];
var shallow = _.clone(objects);
console.log(shallow[0] === objects[0]);
// => true
Числовая глубокая копия (cloneDeep)
Этот метод аналогичен_.clone, за исключением того, что он рекурсивно копируетvalue. (Примечание: также называется глубоким копированием).
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
Значение проверки утверждения (conformsTo)
var object = { 'a': 1, 'b': 2 };
_.conformsTo(object, { 'b': function(n) { return n > 1; } });
// => true
_.conformsTo(object, { 'b': function(n) { return n > 2; } });
// => false
Численное обнаружение (is[type])
экзаменvalueтак или иначеArrayобъект класса.
_.isArray([1, 2, 3]);
// => true
экзаменvalueтак или иначеArrayBufferобъект.
_.isArrayBuffer(new ArrayBuffer(2));
// => true
экзаменvalueЭто оригинальноbooleanтипа или объекта.
_.isBoolean(false);
// => true
экзаменvalueЭтоbuffer.
_.isBuffer(new Buffer(2));
// => true
экзаменvalueтак или иначеDateобъект.
_.isDate(new Date);
// => true
экзаменvalueВозможно ли быть элементом DOM.
_.isElement(document.body);
// => true
экзаменvalueтак или иначеFunctionобъект.
_.isFunction(_);
// => true
экзаменvalueявляется целым числом.
_.isInteger(3);
// => true
экзаменvalueтак или иначеNaN.
Уведомление:Этот метод основан наNumber.isNaNГлобальныйisNaNОтличие в том, что глобальноеisNaNдляundefinedи другие нечисловые значения возвращаютсяtrue.
_.isNaN(NaN);
// => true
экзаменvalueтак или иначеnullилиundefined.
_.isNil(null);
// => true
экзаменvalueявляется алюnull.
_.isNull(null);
// => true
экзаменvalueЭто оригинальноNumberЧисловой или объектный.
_.isNumber(3);
// => true
экзаменvalueЭтоRegExpобъект.
_.isRegExp(/abc/);
// => true
Глубокое значение сравнения ценности равенства (неравномерно)
var object = { 'a': 1 };
var other = { 'a': 1 };
_.isEqual(object, other);
// => true
Математические методы
округлить (потолок)
согласно сprecision(точность) округлитьnumber. (Примечание:precision(Точность) Это можно понимать как сохранение нескольких десятичных знаков. )
_.ceil(4.006);
// => 5
_.ceil(6.004, 2);
// => 6.01
_.ceil(6040, -2);
// => 6100
Округлить вниз (пол)
согласно сprecision(точность) округлить в меньшую сторонуnumber. (Примечание:precision(Точность) можно понимать как сохранение нескольких знаков после запятой. )
_.floor(4.006);
// => 4
_.floor(0.046, 2);
// => 0.04
_.floor(4060, -2);
// => 4000
Максимальное значение массива (max)
рассчитатьarrayмаксимальное значение в. еслиarrayundefined.
_.max([4, 2, 8, 6]);
// => 8
_.max([]);
// => undefined
Массив среднего (среднее)
рассчитатьarrayСредняя стоимость.
_.mean([4, 2, 8, 6]);
// => 5
Минимум массива (МИН)
рассчитатьarrayминимальное значение в . еслиarrayпусто или ложно будет возвращеноundefined.
_.min([4, 2, 8, 6]);
// => 2
_.min([]);
// => undefined
округление (округление)
_.round(4.006);
// => 4
_.round(4.006, 2);
// => 4.01
_.round(4060, -2);
// => 4100
Массив Total Value (сумма)
_.sum([4, 2, 8, 6]);
// => 20
Метод цифрового класса
Предельное значение интервала (зажим)
Возврат ограниченlowerа такжеupperЗначение между.
_.clamp(-10, -5, 5);
// => -5
_.clamp(10, -5, 5);
// => 5
Случайное значение интервала (случайное)
производит включениеlowerа такжеupperчисла между ними. Если указан только один параметр, возвращается0на указанный номер. еслиfloatingустановить какtrue,илиlowerилиupperявляется числом с плавающей запятой, и результат возвращает число с плавающей запятой.
_.random(0, 5);
// => an integer between 0 and 5
_.random(5);
// => also an integer between 0 and 5
_.random(5, true);
// => a floating-point number between 0 and 5
_.random(1.2, 5.2);
// => a floating-point number between 1.2 and 5.2
Метод класса объекта
Путь взят массивом (at)
Создайте массив со значениями изobjectизpathsСоответствующее значение пути.
var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
_.at(object, ['a[0].b.c', 'a[1]']);
// => [3, 4]
выделить и объединить (по умолчанию)
_.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
// => { 'a': 1, 'b': 2 }
_.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
// => { 'a': { 'b': 2, 'c': 3 } }
Итерация по объектам (forIn)
использоватьiterateeПройдите по собственным и унаследованным перечисляемым свойствам объекта.iterateeБудут переданы три параметра:(value, key, object). если вернутьсяfalse,iterateeЯ бросил путешествие заранее.
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.forIn(new Foo, function(value, key) {
console.log(key);
});
// => Logs 'a', 'b', then 'c' (无法保证遍历的顺序)。
Получить значение пути (получить)
согласно сobjectобъектpathПуть получает значение. Если анализируемое значениеundefinedБудуdefaultValueзаменять.
var object = { 'a': [{ 'b': { 'c': 3 } }] };
_.get(object, 'a[0].b.c');
// => 3
_.get(object, ['a', '0', 'b', 'c']);
// => 3
_.get(object, 'a.b.c', 'default');
// => 'default'
Существует ли путь (есть)
экзаменpathтак или иначеobjectПрямые свойства объекта.
var object = { 'a': { 'b': 2 } };
var other = _.create({ 'a': _.create({ 'b': 2 }) });
_.has(object, 'a');
// => true
_.has(object, 'a.b');
// => true
_.has(object, ['a', 'b']);
// => true
_.has(other, 'a');
// => false
удалить путь (сбросить)
Удалитьobjectобъектpathсвойства на пути.
var object = { 'a': [{ 'b': { 'c': 7 } }] };
_.unset(object, 'a[0].b.c');
// => true
console.log(object);
// => { 'a': [{ 'b': {} }] };
_.unset(object, ['a', '0', 'b', 'c']);
// => true
console.log(object);
// => { 'a': [{ 'b': {} }] };
Строка символов
Преобразование строкиstringдляCamelCase.
_.camelCase('Foo Bar');
// => 'fooBar'
_.camelCase('--foo-bar--');
// => 'fooBar'
_.camelCase('__FOO_BAR__');
// => 'fooBar'
сделать заглавной первую букву
преобразовать строкуstringПервая буква прописная, остальные строчные.
_.capitalize('FRED');
// => 'Fred'
Обнаружение завершающих символов (endsWith)
проверить строкуstringли данныйtargetконец строки.
_.endsWith('abc', 'c');
// => true
_.endsWith('abc', 'b');
// => false
_.endsWith('abc', 'b', 2);
// => true
Строки разделяются в преобразованиях (kebabCase)
преобразовать строкуstringдляkebab case.
_.kebabCase('Foo Bar');
// => 'foo-bar'
_.kebabCase('fooBar');
// => 'foo-bar'
_.kebabCase('__FOO_BAR__');
// => 'foo-bar'
Преобразовать через пробел (нижний регистр)
преобразовать строкуstringРазделяйте слова пробелами и переводите их в нижний регистр.
_.lowerCase('--Foo-Bar--');
// => 'foo bar'
_.lowerCase('fooBar');
// => 'foo bar'
_.lowerCase('__FOO_BAR__');
// => 'foo bar'
Преобразование подчеркивания в раздельное (snakeCase)
_.snakeCase('Foo Bar');
// => 'foo_bar'
_.snakeCase('fooBar');
// => 'foo_bar'
_.snakeCase('--FOO-BAR--');
// => 'foo_bar'
первая буква в нижнем регистре (lowerFirst)
преобразовать строкуstringПервая буква строчная.
_.lowerFirst('Fred');
// => 'fred'
_.lowerFirst('FRED');
// => 'fRED'
Если он меньше длины, дополнить его слева и справа (подкладка)
еслиstringДлина строки меньшеlengthзатем заполняет символы слева и справа. Если его нельзя распределить поровну, лишняя длина обрезается.
_.pad('abc', 8);
// => ' abc '
_.pad('abc', 8, '_-');
// => '_-abc_-_'
_.pad('abc', 3);
// => 'abc'
_.padEnd('abc', 6);
// => 'abc '
_.padStart('abc', 6);
// => ' abc'
Повторить строку N раз (повторить)
_.repeat('*', 3);
// => '***'
_.repeat('abc', 2);
// => 'abcabc'
_.repeat('abc', 0);
// => ''
Предварительно скомпилированный шаблон (шаблон)
Создайте метод предварительно скомпилированного шаблона, который вставляет данные в шаблон в позицию, соответствующую разделителю «интерполировать». HTML преобразуется в соответствующий объект в разделителе escape. Разрешить выполнение кода JavaScript в пределах разделителя «вычислить». Переменные находятся в свободном доступе в шаблоне. Если установлен объект параметров, он будет переопределен первым_.templateSettingsценность .
// 使用 "interpolate" 分隔符创建编译模板
var compiled = _.template('hello <%= user %>!');
compiled({ 'user': 'fred' });
// => 'hello fred!'
// 使用 HTML "escape" 转义数据的值
var compiled = _.template('<b><%- value %></b>');
compiled({ 'value': '<script>' });
// => '<b><script></b>'
// 使用 "evaluate" 分隔符执行 JavaScript 和 生成HTML代码
var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
compiled({ 'users': ['fred', 'barney'] });
// => '<li>fred</li><li>barney</li>'
// 在 "evaluate" 分隔符中使用内部的 `print` 函数
var compiled = _.template('<% print("hello " + user); %>!');
compiled({ 'user': 'barney' });
// => 'hello barney!'
// 使用 ES 分隔符代替默认的 "interpolate" 分隔符
var compiled = _.template('hello ${ user }!');
compiled({ 'user': 'pebbles' });
// => 'hello pebbles!'
// 使用自定义的模板分隔符
_.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
var compiled = _.template('hello {{ user }}!');
compiled({ 'user': 'mustache' });
// => 'hello mustache!'
// 使用反斜杠符号作为纯文本处理
var compiled = _.template('<%= "\\<%- value %\\>" %>');
compiled({ 'value': 'ignored' });
// => '<%- value %>'
// 使用 `imports` 选项导入 `jq` 作为 `jQuery` 的别名
var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
compiled({ 'users': ['fred', 'barney'] });
// => '<li>fred</li><li>barney</li>'
// 使用 `sourceURL` 选项指定模板的来源URL
var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
compiled(data);
// => 在开发工具的 Sources 选项卡 或 Resources 面板中找到 "greeting.jst"
// 使用 `variable` 选项确保在编译模板中不声明变量
var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
compiled.source;
// => function(data) {
// var __t, __p = '';
// __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
// return __p;
// }
// 使用 `source` 特性内联编译模板
// 便以查看行号、错误信息、堆栈
fs.writeFileSync(path.join(cwd, 'jst.js'), '\
var JST = {\
"main": ' + _.template(mainText).source + '\
};\
');
Обрезать строку и указать суффикс (обрезать)
обрезатьstringСтрока, если длина строки превышает ограниченное максимальное значение. Усеченная строка будет заменена пропуском, который по умолчанию равен "...".
_.truncate('hi-diddly-ho there, neighborino');
// => 'hi-diddly-ho there, neighbo...'
_.truncate('hi-diddly-ho there, neighborino', {
'length': 24,
'separator': ' '
});
// => 'hi-diddly-ho there,...'
_.truncate('hi-diddly-ho there, neighborino', {
'length': 24,
'separator': /,? +/
});
// => 'hi-diddly-ho there...'
_.truncate('hi-diddly-ho there, neighborino', {
'omission': ' [...]'
});
// => 'hi-diddly-ho there, neig [...]'
Разделить слова на массив (слова)
разделенная строкаstringСлово массив.
_.words('fred, barney, & pebbles');
// => ['fred', 'barney', 'pebbles']
_.words('fred, barney, & pebbles', /[^, ]+/g);
// => ['fred', 'barney', '&', 'pebbles']