MultiMap 挑战:Javascript 减少方法语法错误?

问题描述 投票:0回答:1

我有以下挑战:

构造一个函数

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 方法时,都会遇到语法错误。谁能看出我在这个特定问题上做错了什么?

javascript methods reduce
1个回答
0
投票

你不需要

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'] }

© www.soinside.com 2019 - 2024. All rights reserved.