本文给出了一个关于JS中算法和数据结构字典的例子。分享给大家参考,如下:
实际上,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编程有所帮助。