Javascript TypeError:回调不是函数-如何修复此问题?
我该如何解决这个问题 问题是: 实现一个函数“mapById”,当给定一个对象数组时,该函数返回一个对象,其中键是输入对象的ID,值是相应的输入对象 例如:Javascript TypeError:回调不是函数-如何修复此问题?,javascript,object,callback,Javascript,Object,Callback,我该如何解决这个问题 问题是: 实现一个函数“mapById”,当给定一个对象数组时,该函数返回一个对象,其中键是输入对象的ID,值是相应的输入对象 例如: mapById([{id: 102, name: "Alice"}, {id: 205, name: "Bob", title: "Dr."}, {id: 592, name: "Claire", age: 32}]); 返回: { 102: {id: 102, name: "Alice"}, 205: {
mapById([{id: 102, name: "Alice"},
{id: 205, name: "Bob", title: "Dr."},
{id: 592, name: "Claire", age: 32}]);
返回:
{
102: {id: 102, name: "Alice"},
205: {id: 205, name: "Bob", title: "Dr."},
592: {id: 592, name: "Claire", age: 32}
}
var key=回调(项);
^
TypeError:回调不是函数
function mapById(list, callback) {
var obj = {};
list.forEach(function(item) {
var key = callback(item);
if (obj[key]) {
obj[key] = obj[key].concat(item);
} else {
obj[key] = [item];
}
});
return obj;
}
console.log(mapById(input));
你这样调用这个函数
mapById(my_list, function(){
return "my_key"
});
您得到的错误表明您要么传递了错误的参数作为第二个参数,要么根本没有传递第二个参数
然而,术语回调在这里没有意义。回调函数用于向调用方函数发出被调用函数已完成执行的信号
对于您的情况,我建议使用一个名称,如,
getKey
或getKeyByListItem
等。您这样调用此函数
mapById(my_list, function(){
return "my_key"
});
您得到的错误表明您要么传递了错误的参数作为第二个参数,要么根本没有传递第二个参数
然而,术语回调在这里没有意义。回调函数用于向调用方函数发出被调用函数已完成执行的信号
对于您的情况,我建议使用一个名称,如,getKey
或getKeyByListItem
等。问题:
您遇到的错误是,在定义函数时,您给了它两个参数:list
,callback
函数mapById(列表,回调){
但是,当调用函数时,只给它一个参数:input
console.log(mapById(输入));
因此,当代码被执行并到达函数var key=callback(item)的这一部分时代码>它抛出异常,因为回调未定义,因为您没有传入第二个参数
解决方案:
有很多方法可以解决您的问题。一种解决方案是,当您第一次声明mapById
时,只需在内部调用回调
然后move当调用mapById时,将对象作为第二个参数返回的代码逻辑,当声明对象时,将对象作为第二个参数返回
例如
函数mapById(列表,回调){
var obj={};
返回回调(项目);
}
log(mapById(输入,函数(){
//逻辑就在这里
}));
注意我个人不会这样构造它,因为回调是不必要的,但我将向您展示如何使用回调来完成它。问题:
您遇到的错误是,在定义函数时,您给了它两个参数:list
,callback
函数mapById(列表,回调){
但是,当调用函数时,只给它一个参数:input
console.log(mapById(输入));
因此,当代码被执行并到达函数var key=callback(item)的这一部分时代码>它抛出异常,因为回调未定义,因为您没有传入第二个参数
解决方案:
有很多方法可以解决您的问题。一种解决方案是,当您第一次声明mapById
时,只需在内部调用回调
然后move当调用mapById时,将对象作为第二个参数返回的代码逻辑,当声明对象时,将对象作为第二个参数返回
例如
函数mapById(列表,回调){
var obj={};
返回回调(项目);
}
log(mapById(输入,函数(){
//逻辑就在这里
}));
注意,我个人不会这样构造它,因为回调是不必要的,但我将向您展示如何使用回调来完成它。您在哪里调用mapById
?您可以通过在调用者中提供适当的函数来修复它。格式化您的代码,我想你会发现这个问题的。你能给我们发送你调用mapById函数的部分吗?我正在关闭这个线程并用这个替换它,你在哪里调用mapById
?你可以通过在调用者中提供适当的函数来修复它。格式化你的代码,我想你会发现这个问题的。你能给我们发送你调用mapById函数的片段吗?我正在关闭这个线程并用它替换它。你介意解释一下在没有回调的情况下如何构造代码吗?你介意解释一下在没有回调的情况下如何构造代码吗?