向reduce函数传递参数

aks*_*oco 0 javascript arrays object reactjs

我读过这个文章,但我似乎没有正确理解JavaScript的reduce语法。如何将附加参数传递给自定义减速器函数?

调用reducer函数。

data = Object.values(data.reduce(reducer, {}));
Run Code Online (Sandbox Code Playgroud)

减速器函数示例。

const reducer = (acc, cur) => {
if (somethingIsTrue) {
return acc;
}
};
Run Code Online (Sandbox Code Playgroud)

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

Nap*_*sen 5

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

// 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);
Run Code Online (Sandbox Code Playgroud)

在控制台中:

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'
}
Run Code Online (Sandbox Code Playgroud)

我使用了该function语法,因为我发现它对于解释这一点更加冗长和明确。您当然可以使用箭头函数。使用箭头语法,该函数可能看起来很简单:

function getReducer (stringToAppend) {
    return (acc, curr) => {
        acc[curr] = stringToAppend + curr
        return acc
    }
}
Run Code Online (Sandbox Code Playgroud)