当前位置: 首页 > Web前端 > JavaScript

JavaScript专项算法题(七):Iterators迭代器

时间:2023-03-27 12:53:12 JavaScript

∠冒泡麻须题库原文地址:http://csbin.io/iteratorsIteratorsIterators迭代器挑战1题:A)创建一个for循环遍历数组,返回的总和数组的所有元素。B)创建一个函数迭代器,它在调用时遍历传递的数组的每个元素,一次一个元素。解决方案://CHALLENGE1functionsumFunc(arr){//你的代码在这里letsum=0for(leti=0;i应该记录10functionreturnIterator(arr){//你的代码在这里leti=0constinner=()=>{constelement=arr[i]i++returnelement}returninner}//取消注释下面的行测试你的工作constarray2=['a','b','c','d'];constmyIterator=returnIterator(array2);console.log(myIterator());//->应该记录'a'console.log(myIterator());//->应该记录'b'console.log(myIterator());//->应该记录'c'console.log(myIterator());//->应该记录'd'挑战2问题:创建一个附加了next方法的迭代器。当.next被调用时,这个迭代器一个一个地返回数组的元素。解决方案://CHALLENGE2functionnextIterator(arr){//你的代码在这里leti=0constinner={next:()=>{constelement=arr[i]i++returnelement}}returninner}//取消注释下面几行来测试你的工作constarray3=[1,2,3];constiteratorWithNext=nextIterator(array3);console.log(iteratorWithNext.next());//->应该记录1console.log(iteratorWithNext.next());//->应该记录2console.log(iteratorWithNext.next());//->shouldlog3挑战3题:写代码,使用上面的nextIterator函数遍历整个数组,然后求和。解决方案://CHALLENGE3functionsumArray(arr){//你的代码在这里//使用你的nextIterator函数constiteratorWithNext=nextIterator(arr)letsum=0letitemwhile(item=iteratorWithNext.next()){sum+=item}returnsum}//取消注释下面的行来测试你的workconstarray4=[1,2,3,4];console.log(sumArray(array4));//->应该记录10挑战4问题:使用next方法创建一个附加的迭代器。调用.next时,它返回传递的集合中的每个元素。解决方案://CHALLENGE4functionsetIterator(set){//你的代码在这里//解决方案一://leti=0//constarr=[...set]//return{//next:()=>arr[i++]//}//解决方案二:constnewSet=set[Symbol.iterator]()return{next:()=>newSet.next().value}}//取消注释下面的行以测试你的工作constmySet=newSet('嘿');constiterateSet=setIterator(mySet);console.log(iterateSet.next());//->应该记录'h'console.log(iterateSet.next());//->应该记录'e'console.log(iterateSet.next());//->应该记录'y'挑战5问题:创建一个附加了next方法的迭代器。调用.next时,它返回一个包含两个元素的数组(第一个是索引,第二个是索引对应的数组元素)。解决方案://挑战5functionindexIterator(arr){//你的代码在这里leti=0return{next:()=>{constelement=arr[i]constindex=ii++return[index,element]}}}//取消注释下面的行以测试你的工作constarray5=['a','b','c','d'];constiteratorWithIndex=indexIterator(array5);console.log(iteratorWithIndex.next());//->应该记录[0,'a']console.log(iteratorWithIndex.next());//->应该记录[1,'b']console.log(iteratorWithIndex.next());//->shouldlog[2,'c']挑战6题:创建迭代器。当它的.next方法被调用时,它返回一个句子字符串中的每个单词。(提示:使用正则表达式!)然后将这个操作作为一个方法附在构造函数Words的原型链上。(提示:研究Symbol.iterator!)解决方案://挑战6functionWords(string){this.str=string;}Words.prototype[Symbol.iterator]=function(){//你的代码在这里constreg=/\w+/gconststrArr=this.str.match(reg)letindex=0return{next:()=>(index应该记录'Hello'和'World'挑战7问题:创建一个函数。该函数遍历传入的数组,返回对应遍历元素与字符串“wasfoundafterindexx”拼接的字符串结果,其中x为前一个下标。注意:对于第一个元素,它应该返回“Itisthefirst”。解决方案://CHALLENGE7functionvalueAndPrevIndex(array){constiteratedArray=array[Symbol.iterator]()letindex=0return{sentence:()=>{if(index==0){iteratedArray.next()index++return`它是第一个`}else{constresult=`${iteratedArray.next().value}在索引${index-1}`index++返回结果之后找到}}}}constreturnedSentence=valueAndPrevIndex([4,5,6])console.log(returnedSentence.sentence());console.log(returnedSentence.sentence());console.log(returnedSentence.sentence());挑战8问题:写一个函数。它会每三秒在console.log打印“hellothere”或“gibberish”,这取决于传递给函数的值是否为“english”。不要使用任何形式的循环,并且只调用一次createConversation。解决方案://CHALLENGE8function*createConversation(string){letoutput=''if(string==='english'){output='hellothere'}else{output='gibberish'}yieldsetInterval(()=>{console.log(output)},3000)}createConversation('english').next();挑战9问题:使用async/awaitconsole.log打印一个名词名词和动词动词组成的句子,非异步函数会接收一个名词名词,与硬编码的动词动词拼接,返回异步函数三秒后。异步函数接收到数据后,会在console.log中打印相应的数据。一个异步函数只能被调用一次,传入一个名词来见证它的执行!解决方案://CHALLENGE9functionwaitForVerb(noun){returnnewPromise(resolve=>{constverb='barks'setTimeout(()=>resolve(`${noun}${verb}`),3000)})}asyncfunctionf(名词){constsentence=awaitwaitForVerb(名词??)控制台。日志(句子)}f(“狗”)