gpt4 book ai didi

javascript - 动态调用方法 | JavaScript

转载 作者:行者123 更新时间:2023-12-03 01:20:24 28 4
gpt4 key购买 nike

我创建了一个名为 multiMap 的函数,它接受两个数组作为参数,并将它们映射到对象中的键值对。在某些情况下,第二个值数组可能是函数,它将成为我新创建的对象中的方法。

我希望使用作为字符串参数传入的相应键来调用方法值。我正在尝试使用 obj[item1].call(item1); 行但我似乎无法以这种方式正确调用该函数。感谢任何帮助。

let multiMap = (arr1, arr2) => {
const obj = {};

for(let item1 of arr1) {
for(let i = 0; i < arr2.length; i++) {
let item2 = arr2[i]
obj[item1] = item2;
obj[item1].call(item1);
}
}


return obj;
}

function uppercaser(str) { return str.toUpperCase(); }
function capitalize(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }
function repeater(str) { return str + str; }

var items = ['catfood', 'glue', 'beer'];
var functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions)); // should log: { catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }

最佳答案

这里有一些问题。

First callthis 作为第一个参数,实际参数在后面。由于您没有在函数中使用 this,因此您只需传递 null: item2.call(null, item1)

此外,由于您需要一个值数组,因此有时您需要创建该数组。我会在第一个 for 之后推荐:

let multiMap = (arr1, arr2) => {
const obj = {};

for(let item1 of arr1) {
obj[item1] = [] // make the array
for(let i = 0; i < arr2.length; i++) {
let item2 = arr2[i]
obj[item1].push(item2.call(null, item1)); // now just push into the array
}
}
return obj;
}

function uppercaser(str) { return str.toUpperCase(); }
function capitalize(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }
function repeater(str) { return str + str; }

var items = ['catfood', 'glue', 'beer'];
var functions = [uppercaser, capitalize, repeater];
console.log(multiMap(items, functions));

此外,由于您没有使用 call 的功能来设置 this,因此您可以直接调用函数:

 obj[item1].push(item2(item1)); 

将所有这些与map放在一起,您可以将函数简化为:

let multiMap = (arr1, arr2) => {
const obj = {};
for(let item1 of arr1) {
obj[item1] = arr2.map(fn => fn(item1))
}
return obj;
}

甚至:

let multiMap = (arr1, arr2) => {
return arr1.reduce((obj, item) => {
obj[item] = arr2.map(fn => fn(item))
return obj
}, {})
}

关于javascript - 动态调用方法 | JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51794251/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com