美文网首页前端零碎
知识点(1️⃣)

知识点(1️⃣)

作者: 流着万条永远的河 | 来源:发表于2017-11-08 20:16 被阅读0次
    function ha(num,tar){
      var arr =[]
      for(var i =0;i<num.length -1;i++){
          if(arr.length === 2)   return 
         for(var ind =i+1;ind<num.length;ind++){
           
           var sum = num[i] + num[ind]
            if(sum === tar){
             // console.log(num[i] ,num[ind],sum)
              arr.push(i)
              arr.push(ind)
              //console.log(arr)
            }
        }
        return arr
      }
     
      
    }
    ha([8,1,4,5,8],9)
    console.log(ha([8,1,4,5,8],9))    //[0,1]
    

    目的是为了一个数组里,找两个值的和等于预设的那个值,输出那两个值的下标。
    思路很简单的,但是是最老土的方法了,里面有性能的损耗的,如果是要找到所有的结果倒是不会出现损耗了。然后虽然加了个判断,降低损耗,但是没有完全避免的。
    有待改进。
    我刚开始写了老是出错,但是自己觉得思路是对的,哪里出错了?后来自己试了好多地方,终于发现了,心里很懊悔的,就是等于号,if判定的时候,最好是三个等号去判定。这是教训啊。
    还有,这是一个循环里套着另外一个循环,这里的作用域一定要分清,尤其是哪层才需要return出来。

    后来,我发现数组的一个some的用法,我就试了试,大家可以看看,确实是比较理想的一种功耗方案,不过在实现过程中,我也是一步一步调试出来的,some的用法,我还是忘了很多的,一起玩玩它:
    这里,有个bug,最后的数组里最后两个值,其实就是第一、第二个值的。具体如何产生的呢?其实我是懵逼的,暂时不明白,因为我加了条件判断,只要下标是最后一个就终止,其实还有一个缺点,这个下标是用indexOf找的,如果一个数组里有很多值相同的,那就又要做判断控制了,,,
    但是在这里,其实要求只是输出第一组,这就简单了:
    看看,我把循环的判定撤了,只是在循环里最后用return了,结果,循环自动断了。这里是完美的。
    但是,如果是找出所有的的话,不要用indexOf求下标,还是最根本的for循环,这肯定没错的。

    相关文章

      网友评论

        本文标题:知识点(1️⃣)

        本文链接:https://www.haomeiwen.com/subject/iygymxtx.html