【问题标题】:Passing parameters to reduce function传递参数以减少功能
【发布时间】:2021-12-31 08:27:31
【问题描述】:

我已阅读 this 文章,但我似乎没有正确理解 JavaScript 的 reduce 语法。如何将其他参数传递给自定义 reducer 函数?

调用reducer函数。

data = Object.values(data.reduce(reducer, {}));

Reducer 函数示例。

const reducer = (acc, cur) => {
if (somethingIsTrue) {
return acc;
}
};

现在它工作正常,但是假设我正在调用 reducer 函数,并且我想传递包含“Hello World”的简单变量,该函数不会将其视为参数。我怎样才能做到这一点?

【问题讨论】:

  • 您能否更具体一些,例如您尝​​试了什么?您得到的实际输出预期输出?
  • 参数acccur 被隐式传递,如果它们是您唯一需要的。如果要传递更多参数,则必须像这样显式传递所有参数:data.reduce((acc, cur, your-third-param) => reducer(acc, cur, your-third-param), {})
  • 这是一个学习技巧。不同的人有不同的心态。有时您可能会发现某些资源对您来说不容易理解。然后您可以尝试寻找其他资源,而不要停留在一种资源中。例如。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript arrays reactjs object


【解决方案1】:

您可以进行函数组合来“构建”称为高阶函数的东西。基本上,这个想法是创建一个返回“子函数”的函数,该函数可以访问父函数的变量。

// Parent function (getReducer)
function getReducer(stringToAppend) {
    
    // Child function (reducer)
    function reducer(acc, curr) {
        // Child function has access to parent's variables (in this case stringToAppend)
        acc[curr] = stringToAppend + curr
        return acc
    }
    
    return reducer
}

const data = [0,1,2,3,4,5,6,7,8,9]
const result = data.reduce(getReducer("Hello World "), {})
console.log('result :>> ', result);

在控制台中:

result :>>  {
  '0': 'Hello World 0',
  '1': 'Hello World 1',
  '2': 'Hello World 2',
  '3': 'Hello World 3',
  '4': 'Hello World 4',
  '5': 'Hello World 5',
  '6': 'Hello World 6',
  '7': 'Hello World 7',
  '8': 'Hello World 8',
  '9': 'Hello World 9'
}

我使用了function 语法,因为我发现它更详细、更明确地解释了这一点。您当然可以使用箭头功能。使用箭头语法,函数看起来很简单:

function getReducer (stringToAppend) {
    return (acc, curr) => {
        acc[curr] = stringToAppend + curr
        return acc
    }
}

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多