Пожалуйста, объясните использование _.identity(значение) underscore.js - программирование

Пожалуйста, объясните использование _.identity(значение) underscore.js

Пожалуйста, объясните использование _.identity(value) для underscore.js. Не удалось понять это из документации (http://underscorejs.org/#identity).

Можете ли вы привести пример его использования?

4b9b3361

Ответ 1

Это, по сути, функция отсутствия операции. Он возвращает значение того, что было передано в него.

Часть о том, что он используется как "итератор по умолчанию" в самой библиотеке, означает, что в других функциях, которые могут иметь необязательный параметр "итератор" (который, скорее всего, используется как функция для применения к каждому элементу массива какой-то), если не передан параметр итератора, библиотека будет использовать этот итератор "no-op" вместо этого, и элементы массива останутся неизменными.

Ответ 2

Шаблон кода JavaScript, включающий идентификацию, является фильтрацией значений на основе правдоподобия, например.

var a = [null, null, [1,2,3], null, [10, 12], null];

a.filter(_.identity) 

дает [Массив [3], Массив [2]].

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

_.compact(a)

более четкий, но нельзя использовать lodash или подчеркивание вообще, например.

function identity(x) { 
   return x; 
}

a.filter(identity)

Является ли это хорошим кодом кода сомнительным по нескольким причинам, но он используется в дикой природе.

Это вовсе не NOOP. NOOP является императивной конструкцией, например. а в функциональном программировании он похож на другие функции, так как он возвращает значение. Если личность была NOOP, тогда все чистые функции можно было бы считать noop, и это не было бы разумной вещью.

Ответ 3

Конкретный пример:

Underscore.js определяет _.each и как это.

_.each = function(obj, iterator, context) {
  ...
}

Этот итератор показывает значение el. Возможно, вы использовали эту идиому.

_.each([1, 2, 3], function(el){
  console.log(el);
});

Этот итератор возвращает значение el без изменений.

_.each([1, 2, 3], function(el){
  return el;
});

Функция, которая возвращает значение без изменений, происходит часто. Поэтому Underscore.js хочет определить функцию. Underscore.js называет функцию _.identity.

_.identity = function(value) {
  return value;
};

Если Underscore.js хочет использовать итератор по умолчанию, для всех Underscore.js требуется вызов _.identity.

_.each([1, 2, 3], _.identity);