对象访问括号表示法



各位程序员!超级菜鸟。我很难理解

card['card ' + i] + i

在下面的问题。有人能帮我解释一下为什么else语句中有+i吗?

您当前的客户是一个赌场,需要您修复他们的黑杰克卡计数程序。该函数应该接受一个对象数组,每个对象是一张发过的牌,其值是牌上的数字。

卡片计数的工作方式是每张卡片都有一个加权值。第2到第6张牌值1分;7,8和9的值为零;10张,正面牌和a值为- 1。这种类型的通过记牌来玩系统叫做纠缠的计数。当你倒数一副标准的52张牌时,你会注意到计数会上升和下降,如果你数对了,计数总是以零结束。

cardCounter函数应该接受一个卡片对象数组,并返回卡片的计数(加权值)。它似乎并不产生精确的结果,看看你能不能修复它之前老千击败了房子!

function cardCounter(array) {
var count = 0;
for (var i = 0; i < array.length; i++) {
var card = array[i];
if (card['card ' + i] >= 2 && card['card ' + i] <= 6) {
count++;
} else if (card['card ' + i] + i >= 10 || card['card ' + i] + i === 'face or ace') {
count--;
}

}
return count;
}
function assertEquals(actual, expected, testDescription) {
if (actual !== expected) {
console.log('Test failed:', testDescription);
return;
}
console.log('test passed');
return;
}
var dealtCards = [ { 'card 0': 2 }, { 'card 1': 6 }, { 'card 2': 8 }, { 'card 3': 'face or ace' } ];
var actual = cardCounter(dealtCards);
var expected = 1;
assertEquals(actual, expected, 'function should return correct HiLo count.');
var dealtCards2 = [ { 'card 0': 'face or ace' }, { 'card 1': 9 }, { 'card 2': 8 }, { 'card 3': 'face or ace' } ];
var actual2 = cardCounter(dealtCards2);
var expected2 = -2;
assertEquals(actual2, expected2, 'function should return correct HiLo count.');

你完全正确。在card['card ' + i] + i&amp的末端发现的+ i;card['card ' + i] + i是一个错误。事实上,测试通过的原因是因为正在使用的卡片集合具有8 &而额外的+ i实际上是纯粹巧合地导致了正确的计数。

如果您添加一个额外的测试用例,看起来像这样:

var dealtCards3 = [ { 'card 0': 'face or ace' }, { 'card 1': 9 }, { 'card 3': 'face or ace' } ];
var actual3 = cardCounter(dealtCards2);
var expected3 = -2;
assertEquals(actual3, expected3, 'function should return correct HiLo count.');

抛出错误。

+ i是不正确的,应该被删除。

最新更新