請解釋underscore.js的_.identity(value)
使用。無法從文檔中瞭解它(http://underscorejs.org/#identity)。請解釋underscore.js的_.identity(值)的使用
你能提供其使用的一些例子嗎?
請解釋underscore.js的_.identity(value)
使用。無法從文檔中瞭解它(http://underscorejs.org/#identity)。請解釋underscore.js的_.identity(值)的使用
你能提供其使用的一些例子嗎?
它本質上是一個沒有操作功能。它會返回傳遞給它的值。
關於它的部分在庫本身中用作「默認迭代器」意味着在其他函數中可能有一個可選的「迭代器」參數(它可能用作函數應用於數組的每個元素如果沒有迭代器參數傳遞,庫將使用這個「no-op」迭代器,而數組的元素將保持不變。
一個具體的例子:
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);
使用_.each純粹返回的東西不被建議,這是_.map的用途: '_.map([1,2,3],function(el){ return el; }); ' 用你的代碼表示你的意圖是很好的。 JavaScript的類似於forEach和map的分離效果更好,因爲即使其中存在return語句,每個ea也不會收集函數結果。 –
涉及身份的JavaScript代碼模式是基於真實性過濾值,例如,
var a = [null, null, [1,2,3], null, [10, 12], null];
a.filter(_.identity)
yield [Array [3],Array [2]]。
使用
_.compact(a)
更加清晰,但一個可能不使用lodash或下劃線在所有,例如
function identity(x) {
return x;
}
a.filter(identity)
無論是好的代碼模式有幾個原因值得懷疑,但它在野外使用。
這不是一個空操作的。 NOOP是一個必要的構造,例如彙編,而在函數式編程中,它就像其他函數一樣返回一個值。如果身份是NOOP,那麼所有純粹的功能也可以被認爲是noop,並且這不是一個明智的事情。
貪圖:你可以看到這個空操作,在[註釋源代碼(http://underscorejs.org/docs/underscore.html#section-118)。 –
@DanLee,我不能將評論標記爲答案。 – SunnyShah
@SunnyShah這不是我的回答,只是我的評論。我認爲你可以在幾分鐘內從馬特馬上回答他的答案。 –