将参数传递到内联函数数组中

Passing Arguments into array of inline functions

提问人:LucasAE 提问时间:8/26/2022 更新时间:8/26/2022 访问量:349

问:

挑战说明:构造一个函数 multiMap,它将接受两个数组:值数组和回调数组。multiMap 将返回一个对象,其键与值数组中的元素匹配。分配给键的相应值将是数组,该数组由回调数组的输出组成,其中每个回调的输入是键。

我的解决方案:

    let obj = {};
  for(let i = 0; i < arrVals.length; i++) {
    obj[arrVals[i]] = [arrCallbacks.apply(null, arrVals[i])]
  }
  return obj;
}

console.log(multiMap(['catfood', 'glue', 'beer'], [function(str) { return str.toUpperCase(); }, function(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }, function(str) { return str + str; }]));
// should log: { catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }

思潮:显然我的对象键是正确的,但我似乎无法将 arrVals 参数中的值从 arrCallbacks 参数传入我的匿名函数调用列表。我尝试将我的键值设置为,但这只会填充数组中的第一个元素,但我需要将函数中的所有三个值传递到每个键的值中。唔唔......[arrCallbacks[i](arrVals[i])]

JavaScript 数组 对象 参数传递 anonymous-function

评论

0赞 LucasAE 8/26/2022
我将尝试使用映射内部值赋值来传递所有参数。
0赞 LucasAE 8/26/2022
好的地图不起作用,我还尝试使用传播运算符将所有值作为参数传入。

答:

0赞 Adrià 8/26/2022 #1

据我所知,我在您的代码中看到,您正在对回调数组使用 apply 方法,而不是在每个回调上使用。这可能就是它不起作用的原因。

这是我的猜测:

function multiMap(values, callbacks) {
  let result = {}
  // Iterate over the values
  for (const value of values) {
    // get an array of the result of the callbacks
    result[value] = callbacks.map((callback) => callback(value));
    // version using apply
    // result[value] = callbacks.map((callback) => callback.apply(null, value));
  }
  return result
}

console.log(multiMap(['catfood', 'glue', 'beer'], [function(str) { return str.toUpperCase(); }, function(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }, function(str) { return str + str; }]));

评论

1赞 LucasAE 8/26/2022
它有效!我只需要更改我使用地图的方式的格式。谢谢!