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”的简单变量,该函数不会将其视为参数。我怎样才能实现这个目标?
您可以进行函数组合来“构建”称为高阶函数的东西。基本上,这个想法是创建一个返回“子函数”的函数,该函数可以访问父函数的变量。
// 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)