我正在编写一个带有两个列表的函数,第二个列表与第一个列表相同,只是它被洗牌并删除了一个元素。该函数应返回缺少的元素。我写了这个函数
var findRemoved = function(firstArr, secondArr, indx){
var indx = indx || 0;
for(var i = 0; i<secondArr.length; i++){
if(firstArr[indx] === secondArr[i]){
findRemoved(firstArr, secondArr, ++indx);
}
}
console.log("found end ", firstArr[indx]);
return firstArr[indx];
}
当我用
运行它时var i = findRemoved([1,2,3,4,5,6,7], [5,4,2,6,1,3]);
console.log("i ",i);
我得到它的控制台记录“找到结束”,7,这是正确的,但是递归不会在那时断开并继续前进直到它返回答案“2”任何想法我可能做错了什么?
答案 0 :(得分:3)
您的代码在找到结果时继续运行,因此每个索引都会循环并返回该索引。您可以返回来自递归的索引,并在第二个数组中找到第一个数组的发生时停止循环。
注意:我没有尝试编写一个好的实现,只能修复你的。
var findRemoved = function(firstArr, secondArr, indx){
var indx = indx || 0;
var result = null;
for(var i = 0; result==null && i<secondArr.length; i++){
if(firstArr[indx] === secondArr[i]){
result = findRemoved(firstArr, secondArr, ++indx);
}
}
result = result || firstArr[indx]
console.log("found end ", result);
return result;
}
var i = findRemoved([1,2,3,4,5,6,7], [5,4,2,6,1,3]);
console.log("i ",i);
这是一个小提琴:http://jsfiddle.net/b5Aus/
答案 1 :(得分:2)
你尝试过这样的事吗?
var findRemoved = function(firstArr, secondArr){
for(var i=0, l=firstArr.length; i<l; ++i)
if(secondArr.indexOf(firstArr[i]) < 0)
return firstArr[i];
}