即使在JS和JQ研究之后,也无法弄清楚parseInt

时间:2014-05-01 02:30:00

标签: javascript jquery parseint

我有一个包含大字符串属性的对象。此属性具有一个值,其中包含先前在脚本中生成的随机数,格式为x,x,x,x ...(由于程序中变量的其他需要,因此不能也不能是数组)所以上。我试图得到这些数字的总和,我的第一个想法是使用parseInt()通过将它们全部拆分然后将它们加在一起来做到这一点,但是当我这样做时它只返回第一个数字。这是我应该做的,但我只是做错了吗?或者是否有其他功能可以使这更容易?

该程序是一个二十一点游戏,我正在努力了解我对所学习内容的理解程度。

这是我试图制作的功能,看看用户在击中时是否会破坏(目前为止并不多,因为我无法弄清楚parseInt的事情)

function checkBust() {

    var total = parseInt(user.hand, 10);

}

用户对象

var user = {
hand: dealUser()
};

以及设置对象属性的函数

function randomCard() {

            // random number between 0 and 10
            var j = Math.random() * 10;

            // round that number into a var called card
            var card = Math.round(j);   

            // if card is 0, assign a J Q or K by making a random number again
            if (card === 0) {

                //another random number
                var k = Math.random() * 10; 

                // checks random number and assign J Q or K                     
                if (k <= 4) {
                    card = 'J';
                } else if (k <= 7) {
                    card = 'Q';
                }
                else {
                    card = 'K';
                }
            }

            // value of the function is a single card
            return card;

        }

function dealUser() {

            // empty array to store cards
            var x = [];

            // var to start for loop 
            var i = 0;      

            // start for loop 
            for (i; i < 2; i++) {

                // add a random card to the i^th index of x
                x[i] = randomCard();
            }
            // value for function is array of two cards x[0] , x[1] 
            var cards = x[0] + " , " + x[1]; 
            return cards;

        }

1 个答案:

答案 0 :(得分:4)

parseInt会在到达非数字字符时停止解析

parseInt('1234,5678', 10); // => 1234
// since a comma (,) is not a numeric character, everything after is ignored.

您必须使用逗号作为分隔符将字符串拆分为字符串数组:

'1234,5678'.split(','); // => ['1234', '5678'];

然后解析数组的每个元素以将它们转换为数字,然后然后你可以将它们相加。

以下是我的表现:

var nums = "1,2,3,4,5";

var sum = nums.split(',').reduce(function(memo, num) {
  return memo + parseInt(num, 10);
}, 0);

console.log(sum); // => 15

那应该有用。请参阅jsbin example

请注意,split参数需要与您在字符串中使用的分隔符相匹配。对于此示例,','是合适的。对于您的示例,您可能需要/\s*,\s*/

相依

由于您提供了一个代码示例,我可以看到您花费了大量精力尝试将打孔并将值转换为您需要的类型,而不是在对象中公开类型。我可以建议:

function Stack(cards) {
  this.cards = cards || [];
}

Stack.prototype.toString = function() {
  return this.cards.join(' , ');
};

Stack.prototype.sum = function() {
  return this.cards.reduce(function(memo, card) {
    return memo + parseInt(card, 10);
  }, 0);
};

function randomCard() {
  return Math.floor(Math.random() * 13) + 1;
}

Stack.dealHand = function() {
  var card1 = randomCard(), card2;
  do { card2 = randomCard(); } while (card1 === card2);
  return new Stack([card1, card2]);
};

// Example
var hand = Stack.dealHand();
console.log(hand + ' = ' + hand.sum()); // => '3 , 11 = 14'