Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript递归函数中遍历字典_Javascript - Fatal编程技术网

在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()
提供一个迭代器,您可以从中获取一些“下一个”键/值对谢谢,丹!这很有帮助。谢谢你,丹!这很有帮助。