javascript - JavaScript:使用回调创建返回一个对象的函数,该对象的键与值数组中的元素匹配
问题描述
我的目标如下:
构造一个函数 multiMap ,它将接受两个数组——一个值数组和一个回调数组。multiMap 将返回一个对象,其键与值数组中的元素匹配。分配给键的相应值将是由回调数组的输出组成的数组,其中每个回调的输入是键。
我尝试了下面的代码:
const multiMap = (arrOne, arrTwo) => {
let newObj = {};
for (let i=0; i<arrOne.length; i++){
let element = arrOne[i];
console.log(i)
newObj[element] = arrTwo[i](element);
}
return newObj;
}
// 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; }
// arrOne
const items = ['catfood', 'glue', 'beer'];
// arrTwo
const functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions));
我的代码返回:{ catfood: 'CATFOOD', glue: 'Glue', beer: 'beerbeer' }
我希望它返回:{ catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }, 'Beer', 'beerbeer'] }
我究竟做错了什么?
注意:我知道我可以使用修改函数(即 reduce)来做到这一点,但我想先使用 for 循环来解决这个问题。
解决方案
问题是您只在第一个数组上循环。您必须遍历数组 1 中每个值的所有函数。
const multiMap = (arrOne, arrTwo) => {
let newObj = {};
for (let i=0; i<arrOne.length; i++){
let element = arrOne[i];
newObj[element] = [];
for(let j=0;j < arrTwo.length; j++) {
newObj[element].push(arrTwo[j](element));
}
}
return newObj;
}
// 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; }
// arrOne
const items = ['catfood', 'glue', 'beer'];
// arrTwo
const functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions));
推荐阅读
- angular - 无法在另一个组件中获取和显示数据
- sql - 从用户定义的表类型中读取
- c# - AddRange 直接来自 `await`
- docker - Dockerfile:FastCGI Throws Primary script unknown”,同时从上游错误读取响应标头
- c++ - 重用预先分配的向量
> 作为向量 两倍的长度 - vba - B列中的VBA逗号分隔数据与A列中的文本连接
- datetime - 通过 RTTI 将 TDateTime 值传递给 OleVariant 属性
- c# - Apple Store 设备兼容性
- regex - 使用正则表达式获取第一个问题的标签名称
- python - pyspark 数据框的收集方法引发异常