簡體   English   中英

如何將Array.prototype方法作為參數傳遞給咖喱函數

[英]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),並且必須創建兩個不同的咖喱函數filterGroupsfindGroups 這些工作按預期進行,但我想將數組原型方法作為附加參數傳遞,以使此代碼更加干燥。

在開始了解如何在我的代碼中使用咖喱函數的情況下,我非常樂於接受這種情況的不同看法

您可以為原型使用另一個參數,並使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM