我有以下挑战:
构造一个函数
,它将接受两个数组——一个值数组和一个回调数组。 multiMap 将返回一个对象,其键与值数组中的元素匹配。分配给键的相应值将是由回调数组的输出组成的数组,其中每个回调的输入都是键。multiMap
挑战给出的代码:
// Uncomment these to check your work!
function uppercaser(str) { return str.toUpperCase(); }
function capitalize(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }
function repeater(str) { return str + str; }
const items = ['catfood', 'glue', 'beer'];
const functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions)); // should log: { catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }
我的解决方案
function multiMap(array, callbacks) {
const emptyArray = [];
return array.reduce((acc, current) => {
array.forEach(element => {
while (callbacks.length) {
emptyArray.push(callbacks(element));
}
}
return acc[current] = emptyArray
)
}, {})
}
// Uncomment these to check your work!
function uppercaser(str) {
return str.toUpperCase();
}
function capitalize(str) {
return str[0].toUpperCase() + str.slice(1).toLowerCase();
}
function repeater(str) {
return str + str;
}
const items = ['catfood', 'glue', 'beer'];
const functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions)); // should log: { catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }
我的问题:
我正在努力推动自己更频繁地使用方法来解决挑战。每次我尝试使用 reduce 方法时,都会遇到语法错误。谁能看出我在这个特定问题上做错了什么?
你不需要
array.reduce()
和array.forEach()
。第一个将遍历数组。在里面你应该使用 callbacks.map()
来获取每个回调的结果列表。
reduce()
回调函数必须在更新后返回acc
。
function multiMap(array, callbacks) {
return array.reduce((acc, current) => {
acc[current] = callbacks.map(callback => callback(current));
return acc;
}, {})
}
// Uncomment these to check your work!
function uppercaser(str) {
return str.toUpperCase();
}
function capitalize(str) {
return str[0].toUpperCase() + str.slice(1).toLowerCase();
}
function repeater(str) {
return str + str;
}
const items = ['catfood', 'glue', 'beer'];
const functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions)); // should log: { catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }