2014-11-01 244 views
0

執行時。該代碼警告一個數組充滿未定義的對象。我試圖製作一副撲克牌,讓每張牌成爲一個擁有2個對象屬性(花色和價值)的數組元素。我認爲這個問題出現在2個陣列的融合中。Javascript組合對象數組

感謝您的幫助提前!

<body> 
    <h1>Problem #1</h1> 
    <h2>Number of Players:</h2> 
    <form id='form'> 
     <input type="radio" name="playerChoice" id="playerChoice-1" value="1" /> 
     <label for="playerChoice-1">1</label> 
     <input type="radio" name="playerChoice" id="playerChoice-2" value="2" /> 
     <label for="playerChoice-2">2</label> 
     <input type="radio" name="playerChoice" id="playerChoice-3" value="3" /> 
     <label for="playerChoice-3">3</label> 
     <input type="radio" name="playerChoice" id="playerChoice-4" value="4" checked="checked" /> 
     <label for="playerChoice-4">4</label> 
    </form> 
    <a id="deal" href="#">Deal</a> 
    <div id="theDealtHands"> 
     <p id='p1'>Player 1:</p> 
     <p id='p2'>Player 2:</p> 
     <p id="p3">Player 3:</p> 
     <p id='p4'>Player 4:</p> 
    </div> 

    <script src="js/jquery-2.0.3.min.js"></script> 
    <script> 
     $(document).ready(function() { 
      alert("Welcome to the Card House!"); 
      //Add the event listener for the deal button here 
      $('#deal').click(function(){ 
       var deck = createDeck(); 
       var deck = shuffleDeck(deck); 
       var choice = $('input[name=playerChoice]:checked', '#form').val(); 
       dealCards(choice, deck); 
      }); 
     }); 

     var createDeck = function(){ 
      var deck = []; 
      var suits = [{suit: 'hearts'}, {suit: 'spades'}, {suit: 'diamonds'}, {suit: 'clubs'}]; 
      for (var x =0; x<4; x++){ 
       deck.push({value: 'Ace'}, {value: '2'}, {value: '3'}, {value: '4'}, {value: '5'}, {value: '6'}, {value: '7'}, {value: '8'}, {value: '9'}, {value: '10'}, {value: 'Jack'}, {value: 'Queen'}, {value: 'King'}); 
      } 
      alert(deck); 
      for (var y=0; y<52; y++){ 
       if(y<13){ deck[y] = deck[y] + suits[0];} 
       else if (y<26){ deck[y] = deck[y] +suits[1];} 
       else if (y<39) { deck[y] = deck[y] + suits[2];} 
       else {deck[y] = deck[y] + suits[3];} 
      } 
      return deck; 
     }; 


    </script>   
</body> 

+1

注:JavaScript不支持*加入*對象合併它們,但[有選擇來實現這一目標(HTTP://計算器/問題/ 171251 /何燦我合併 - 屬性 - 的 - 兩個JavaScript的對象 - 動態.COM)。 – 2014-11-01 06:16:26

+0

甜蜜的感謝!這回答了我的問題;榮譽。 – 2014-11-01 06:45:23

回答

0

要合併的對象,你可以簡單地使用underscorejs通過調用_.extend()方法

_.extend(目的地,*源)

只是記源和目的地中具有相同名稱的屬性將被新的替換爲

例如

var obj1 = {p1:'v1',p2:'v2'}; 
var obj2 = {p1:'v3',p4:'v4'}; 

var obj3 = _.extend(obj1,obj2) // which is {p1:'v3',p2:'v2',p4:'v4'} 

瞭解更多詳情,您可以檢查underscorejs _.extend