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出来。
这里,有个bug,最后的数组里最后两个值,其实就是第一、第二个值的。具体如何产生的呢?其实我是懵逼的,暂时不明白,因为我加了条件判断,只要下标是最后一个就终止,其实还有一个缺点,这个下标是用indexOf找的,如果一个数组里有很多值相同的,那就又要做判断控制了,,,
但是在这里,其实要求只是输出第一组,这就简单了:
看看,我把循环的判定撤了,只是在循环里最后用return了,结果,循环自动断了。这里是完美的。
但是,如果是找出所有的的话,不要用indexOf求下标,还是最根本的for循环,这肯定没错的。
网友评论