在JavaScript递归函数中遍历字典
我有一个字典,它有一些回调函数。例如:在JavaScript递归函数中遍历字典,javascript,Javascript,我有一个字典,它有一些回调函数。例如: const CallBacks = {'a': CallBackA, 'b': CallBackB, 'c': CallBackC }; 我需要写一个这样的函数 function CallAllCallBacks(CallBackValue,CallBackFunc){ var Res = CallBackFunc(CallBackValue); CallAllCallBacks(NextKeyInDictionary, NextValu
const CallBacks = {'a': CallBackA, 'b': CallBackB, 'c': CallBackC };
我需要写一个这样的函数
function CallAllCallBacks(CallBackValue,CallBackFunc){
var Res = CallBackFunc(CallBackValue);
CallAllCallBacks(NextKeyInDictionary, NextValueInDictionary);
}
CallAllCallBacks('a',CallBacks['a']);
其中CallBackA、CallBackB、CallBackC
都是一些函数
如何在递归执行函数时遍历字典
提前谢谢。您可以使用
这将把回调字典转换为多维数组
从:
方法返回给定对象自身的数组
可枚举字符串键控属性[键,值]对
例如:
Object.entries(CallBacks);
// output:
// [
// [ 'a', ƒ CallBackA() ],
// [ 'b', ƒ CallBackB() ],
// [ 'c', ƒ CallBackC() ]
// ]
通过这种转换,您可以灵活地执行递归或迭代方法
递归方法
//回调示例
const CallBackA=(k)=>console.log(k,‘CallBackA’);
constcallbackb=(k)=>console.log(k,'CallBackB');
constcallbackc=(k)=>console.log(k,‘CallBackC’);
//回调
常量回调={
a:CallBackA,
b:CallBackB,
c:回拨
};
//词典条目
const entries=Object.entries(回调);
函数CallAllCallBacks(条目){
//基本情况
if(entries.length==0){
返回;
}
//删除第一个元素并捕获其[key,value]对
const[key,cb]=entries.shift();
//调用回调
var Res=cb(键);
//用Res做点什么
// ...
//重现
返回CallAllCallBacks(条目);
}
//调用递归函数
CallAllCallBacks(条目)代码>您可以使用
这将把回调字典转换为多维数组
从:
方法返回给定对象自身的数组
可枚举字符串键控属性[键,值]对
例如:
Object.entries(CallBacks);
// output:
// [
// [ 'a', ƒ CallBackA() ],
// [ 'b', ƒ CallBackB() ],
// [ 'c', ƒ CallBackC() ]
// ]
通过这种转换,您可以灵活地执行递归或迭代方法
递归方法
//回调示例
const CallBackA=(k)=>console.log(k,‘CallBackA’);
constcallbackb=(k)=>console.log(k,'CallBackB');
constcallbackc=(k)=>console.log(k,‘CallBackC’);
//回调
常量回调={
a:CallBackA,
b:CallBackB,
c:回拨
};
//词典条目
const entries=Object.entries(回调);
函数CallAllCallBacks(条目){
//基本情况
if(entries.length==0){
返回;
}
//删除第一个元素并捕获其[key,value]对
const[key,cb]=entries.shift();
//调用回调
var Res=cb(键);
//用Res做点什么
// ...
//重现
返回CallAllCallBacks(条目);
}
//调用递归函数
CallAllCallBacks(条目)代码>你说的“下一个键”是什么意思?对象是无序的集合。为什么要递归地执行它,而不是使用简单的for…in
循环?@Bergi是的,这是有道理的,但我只是想要一个函数,它可以为我提供一个接一个的键值对,即使它们不是按任何顺序排列。在我的例子中,一个简单的for…in循环不起作用,因为所有回调都会建立到硬件的连接并进行通信。所以对于…in-loop,它不能帮助我同步工作,这意味着可以同时发送多个连接和多个命令。所以,我需要一个真正的回调式结构,其中方法只有在前一个方法完成后才开始执行,即使有一些延迟。所以,递归是我认为最好的选择。您需要使用async
/wait
then:-)或者,Object.entries(…).values()
提供一个迭代器,您可以从该迭代器中获取一些“下一个”键/值对您所说的“下一个键”是什么意思?对象是无序的集合。为什么要递归地执行它,而不是使用简单的for…in
循环?@Bergi是的,这是有道理的,但我只是想要一个函数,它可以为我提供一个接一个的键值对,即使它们不是按任何顺序排列。在我的例子中,一个简单的for…in循环不起作用,因为所有回调都会建立到硬件的连接并进行通信。所以对于…in-loop,它不能帮助我同步工作,这意味着可以同时发送多个连接和多个命令。所以,我需要一个真正的回调式结构,其中方法只有在前一个方法完成后才开始执行,即使有一些延迟。所以,递归是我认为最好的选择。您需要使用async
/wait
then:-)或者,Object.entries(…).values()
提供一个迭代器,您可以从中获取一些“下一个”键/值对谢谢,丹!这很有帮助。谢谢你,丹!这很有帮助。