4. Продвинутые функции


1. Randomize

const _ = require('lodash');
console.log('random', _.random(0, 10));


2. Делаем данные уникальными

const _ = require('lodash');
console.log('uniqueId', _.uniqueId('user_'));
console.log('uniqueId', _.uniqueId('user_'));
console.log('uniqueId', _.uniqueId('user_'));


3. Делаем массивы одномерными

const _ = require('lodash');

const foo = [[1, 2], [3]];

console.log(_.flatten(foo));


4. Удаляем пустые элементы

Удаляет все false, null, 0, “”, undefined, Nan из массива.

В том числе удаляет пустую строку.

const _ = require('lodash');

console.log(_.compact([false, null, undefined, 'Привет!!!', ' ']));


5. Иммутабельное обновление данных

const _ = require('lodash');

const state = {
  isLoading: false,
  data: null,
  error: null,
};

const newState = _.assign({}, state, { isLoading: true });

console.log('result', state, newState);


6. Клонируем данные

clone не копирует вложенные поля.

Нужно использовать cloneDeep если используются вложенные поля.

cloneDeep - работает медленнее.

const _ = require('lodash');

const baseConfig = {
  apiUrl: 'http://someapi.com',
  port: 4000,
};

const createExtendedConfig = (config) => {
  // const cloneConfig = _.clone(config)
  const cloneConfig = _.cloneDeep(config);
  cloneConfig.host = 'https://google.com';
  return cloneConfig;
};

const result = createExtendedConfig(baseConfig);

console.log('baseConfig', baseConfig);
console.log('result', result);


7. Проверяем типы данных

const _ = require('lodash');

console.log(_.isEqual([1, 2], [1, 2]));
console.log(_.isEmpty([]));
console.log(_.isEmpty([1, 2, 3]));


if (_.isNil(user)) {
}


8. Что такое Debounce

debounce - отложенный вызов

<body>
  <h1>Hi lodash</h1>
  <input type="text" id="name" />
  <input type="text" id="email" />
  <script src="main.js"></script>
</body>


var handler = funcion(event){
  console.log('send reqquest to server', event.target.value)};
}

document
.getElementById('name')
.addEventListener('keydown', _.debounce(handler, 2000));
});


9. Что такое Throttle

throttle - блокирует вызов, например несколько секунд ничего не происходит на указанный интервал.

Например, чтобы не кликали много раз на кнопку.

var handler = funcion(event){
  console.log('send reqquest to server', event.target.value)};
}

document
.getElementById('name')
.addEventListener('keydown', _.debounce(handler, 2000));
});

document
.getElementById('email')
.addEventListener('keydown', _.throttle(handler, 2000));
});


10. Миксины

Свои собственные lodash функции внутри chain.

const _ = require('lodash');

const capitalizeLast = (str) => {
  const lastSymbol = _.last(str);
  const initialSymbols = _.chain(str).initial().join('').value();

  return initialSymbols + _.capitalize(lastSymbol);
};

_.mixin({ capitalizeLast });

const result = _.chain('foo').capitalizeLast().value();

console.log('result', result);