宝哥软件园

JS中算法和数据结构的字典示例的详细说明

编辑:宝哥软件园 来源:互联网 时间:2021-08-20

本文给出了一个关于JS中算法和数据结构字典的例子。分享给大家参考,如下:

字典(Dictionary)

Dictionary是以键值对的形式存储数据的数据结构。就像我们平时查通讯录一样,要找电话,先找到号码的主人姓名,然后电话号码就会有了。这里的关键是你在寻找什么。在这种情况下,它指的是姓名,值是搜索结果,即对应的电话号码。

实际上,JavaScript中的对象类是以字典的形式设计的。接下来,我们将借助Object类的特性独立实现一个字典类,让这个字典类型的对象使用起来更加方便。

字典的实现

字典类基于数组类。

和我们之前看到的数据结构一样,字典类也应该有增加、删除、清空等操作,所以我们可以先定义一个字典类的基本数据类型,如下图所示。

数据类型定义

有了上面的数据类型定义,我们的Dictionary类构造函数定义就解决了

//字典类function dictionary(){ this . datastore=[];this.add=add//添加元素this.find=find//找到元素this.remove=remove//删除元素this.count=countthis.showAll=showAll字典中的元素数;//显示字典元素this.clear=clear//空字典}添加:向字典中添加一个元素

如上所述,字典以键值对存储数据。因此,add方法需要接受两个参数,即key和值,其中key表示它在字典中的索引,其实现如下

//add元素函数add (key,value) {this。datastore [key]=字典的值;}是的,就这么简单!然后让我们看看查找方法

查找:在字典中查找元素

我们存储在键值对中,所以只需要传入要查找的键,就可以逻辑上得到对应的值,这对应JS中的数组也很简单;

//find元素函数find(key){在字典中返回this . datastore[key];}有了添加和搜索,下一步就是删除!

移除:从字典中移除元素

要删除字典中的一个元素,也就是删除一个键值对,我们需要使用JS提供的内置函数:delete。这个功能我们并不陌生。它可以同时删除键及其对应的值,所以remove方法定义非常简单。

//删除元素函数remove (key) {if (this。数据存储[键])删除此。数据存储[密钥];否则返回“未找到”;}此外,我们还希望显示字典中的所有键值对,这是通过showAll方法完成的。

显示:显示字典中的所有键值对

//display dictionary元素functionshowall(){ for(this . datastore中的var键){console.log(键'-' this . datastore[键]);}}我们已经完成了字典的基本操作,现在我们来做一个小测试。

//实例化字典类var目录=new Dictionary();//添加元素目录. add ('jack ',' 138 * * * * 5505 ');directory.add('Alice ',' 156 * * * * 6606 ');目录. add('Tom ',' 180 * * * * 8808 ');//显示字典目录. showall();//Jack-138 * * * * 5505//Alice-156 * * * * 6606//Tom-180 * * * * 8808目录. remove(' Tom ');directory . showall();//Jack-138 * * * * 5505//Alice-156 * * * * 6606我们在定义的时候看到还有两个方法没有实现,一个是count,一个是clear。让我们一起实现它们。

计数:检查字典中的元素数量

这种方法有时可能有用,但可能与你想象的不同。让我们先来看看如何实现它

//检查字典函数count()中的元素个数{ var n=0;for(this . Datastore中的var键){ n;}返回n;},是不是和我想的不一样?为什么不用length属性?不是很简单吗?其实不然,当我们的键是字符串时,数组的长度属性就不起作用了。请参见以下示例:

var nums=[ 0,1,2];console.log(nums.length) //3var目录=[];目录[' Jack ']=' 138 * * * * 5505 ';目录[' Alice ']=' 156 * * * * 6606 ';目录[' Tom ']=' 180 * * * * 8808 ';console . log(directory . length)//0,你现在知道另一个坑了吗?哈哈,我们来实现最后一个清除方法。

清除:清除字典

//清除字典函数clear(){ for(this . datastore中的var键){ delete this . datastore[key];}}至此,词典的功能已经基本完成。我们使用上面的代码继续进行测试

console . log(directory . count());//2 directory . clear();console . log(directory . count());//0在字典中,我们通常使用键来获取值,所以我们不需要关心S数据在字典中的实际存储顺序,但是我们希望看到字典的内容显示有序,这也很简单。我们只需要稍微修改一下我们的showAll方法。

//转换后的showall函数show all(){ var sort keys=object . keys(this . datastore)。sort();for(sort keys中的var键){ console . log(sort keys[key]'-this . datastore[sort keys[key]]);{ 0 }和我们之前的方法唯一的区别是,我们得到密钥后,会对它们进行一次排序。让我们看看新方法的输出。

//转载以上词典目录. showall();//Alice-156 * * * * 6606//Jack-138 * * * * 5505//Tom-180 * * * * 8808需要注意的是,在上面的showAll方法中,在对Object.keys()进行排序之后。sort(),将返回一个新数组。

//sortkeys ['Alice ',' Jack ',' Tom']这时数组的键是0,1,2,这样是不是清楚多了?

至此,我们已经基本了解了字典的一些内容,可以用JS自己实现一个字典了,太棒了!接下来,大家加油~

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun来测试上述代码的运行效果。

关于JavaScript的更多信息,请参考本网站的主题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、0103010。

希望本文对JavaScript编程有所帮助。

更多资讯
游戏推荐
更多+