我正在尝试编写一个函数,如果手中有五张卡,则返回true。当我在最后一个大括号前放置return false时,它起作用。当我将return false放入嵌套的for循环内时,它会自动返回。为什么?
var cards = [
{value: 4, suit: 'Clubs'},
{value: 8, suit: 'Hearts'},
{value: 7, suit: 'Spades'},
{value: 5, suit: 'Clubs'},
{value: 8, suit: 'Diamonds'},
]
function pair(handOfCards){
for (var i=0; i<handOfCards.length; i++){
for (var j=i+1; j<handOfCards.length; j++){
if(handOfCards[i].value===handOfCards[j].value){
return true
}
return false
}
}
}
答案 0 :(得分:1)
要使您更进一步,可以使用单循环方法,并使用Set
作为访问值。
function pair(handOfCards) {
var i,
values = new Set;
for (i = 0; i < handOfCards.length; i++) {
if (values.has(handOfCards[i].value)) { // check set
return true;
}
values.add(handOfCards[i].value); // add value to set
}
return false;
}
var cards1 = [{ value: 4, suit: 'Clubs' }, { value: 8, suit: 'Hearts' }, { value: 7, suit: 'Spades' }, { value: 5, suit: 'Clubs' }, { value: 8, suit: 'Diamonds' }],
cards2 = [{ value: 4, suit: 'Clubs' }, { value: 8, suit: 'Diamonds' }];
console.log(pair(cards1)); // true
console.log(pair(cards2)); // false
答案 1 :(得分:0)
如MDN中所述:
return语句结束函数执行并指定要返回给函数调用者的值。
因此,问题在于,只要不满足您的条件,整个函数就会停止,因此for循环会中断,并且如果if失败,则返回false。
要解决该问题,只需将for循环的return语句移出,这样,如果未找到对,则返回false
。
function pair(handOfCards){
for (var i=0; i<handOfCards.length; i++){
for (var j=i+1; j<handOfCards.length; j++){
if(handOfCards[i].value===handOfCards[j].value){
return true;
}
}
}
return false; // <-- return false statement moved here.
}
正在工作的小提琴:https://jsfiddle.net/j92acpdn/
答案 2 :(得分:0)
i = 0第一次执行内部循环,这意味着您正在检查与card.value:4是否匹配
在当前位置返回false的情况下,它将在j = [1,..,4]处循环一次,如果没有其他值为4的牌,则将返回false。
返回false必须在循环之外,以允许检查所有值i = [1-4]。
答案 3 :(得分:-1)
答案 4 :(得分:-1)
return
语句停止进一步执行该功能。在您的代码中,无论是否满足条件,它都将返回值。
即使您将else
放在return false
之前,它仍然会这样做,而return
会在第一个循环中这样做。
答案 5 :(得分:-1)
如果您将代码分解为该for循环:
for (var j=i+1; j<handOfCards.length; j++){
if(handOfCards[i].value===handOfCards[j].value){
return true
}
return false
}
您可以看到在if语句之后立即调用return false,这意味着它将仅经历for循环的1次迭代,然后返回false。
解决此问题的一种方法是添加一个初始化为false的布尔值found
。找到匹配项时,不要将找到的布尔值更改为true,而是返回true。在函数末尾,返回found
值,无论是真还是假。