[英]how to pass Array.prototype methods as parameters in curried functions
我開始學習咖喱函數,並認為擁有一個函數可以使我在類似dom元素的組(屬於同一父級的輸入或選擇組)中找到滿足以下條件的函數將很有用。回調函數。
我的目標是擁有一個咖喱函數,在其中我可以傳遞DOM元素的id( parentId
),該DOM元素包含要在其上運行callback
的元素(類class groupClassName
)。 我設法使curried函數正常工作,但是我找不到方法將array.prototype
方法作為參數傳遞。 目前,該方法(.filter或.find方法)已硬編碼在函數中。 我認為,如果我可以將其作為參數傳遞,並且只有一個curried函數,我可以在其中決定要使用哪種原型方法,則它將更加干燥。
const filterGroups = parentId => groupClassName => callback => {
const groups = Array.from(
document.getElementById(parentId).getElementsByClassName(groupClassName)
);
return groups.filter(group => callback(group));
};
const findGroups = parentId => groupClassName => callback => {
const groups = Array.from(
document.getElementById(parentId).getElementsByClassName(groupClassName)
);
return groups.find(group => callback(group));
};
我正在使用的回調示例如下:
export function altDateGroupEmpty(group) {
const selects = Array.from(group.getElementsByTagName("select"));
return selects.every(select => select.value === "");
}
目前,我無法通過數組原型方法(filter或find),並且必須創建兩個不同的咖喱函數filterGroups
和findGroups
。 這些工作按預期進行,但我想將數組原型方法作為附加參數傳遞,以使此代碼更加干燥。
在開始了解如何在我的代碼中使用咖喱函數的情況下,我非常樂於接受這種情況的不同看法
您可以為原型使用另一個參數,並使用Function#call
通過thisArg
調用原型。
const perform = parentId => groupClassName => prototype => callback => {
const groups = Array.from(document.getElementById(parentId).getElementsByClassName(groupClassName));
return prototype.call(groups, callback);
};
打電話給
perform('foo')('grey')(Array.prototype.filter)(g => true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.