簡體   English   中英

使用 for 循環訪問 object 鍵

[英]Accessing object keys with for loop

我有一些棋子存儲為對象數組,我想使用 for 循環訪問鍵,但我收到“無法讀取未定義的屬性 '0'”的錯誤消息。 為什么會出現這種情況?

謝謝你的幫助!

Javascript:

pawn = {
    color: [
              {c1: 'white'}, {c2: 'white'}, {c3: 'white'}, {c4: 'white'}, {c5: 'white'}, {c6: 'white'},
              {c7: 'white'}, {c8: 'white'}, {c9: 'black'}, {c10:'black'}, {c11: 'black'}, {c12: 'black'},
              {c13:'black'}, {c14:'black'}, {c15:'black'}, {c16:'black'}
           ],
   playable: function()
   {        
        k1 = [];
        for (i = 0; i < 16; i++)
        {
            k1.push(Object.keys(pawn.color[i]));
            console.log(k1);    //[['c1'], ['c2'], ['c3'], ['c4'], ['c5'], ['c6'], ['c7'], ['c8'], 
                          // ['c9'], ['c10'], ['c11'], ['c12'], ['c13'], ['c14'], ['c15'], ['c16']];
        }

        for (piece = 0; piece < 16; piece++)
            {
                if (pawn.color[piece].k1[piece][0] == 'white'){ //error msg.
                    console.log('white');
                }

                if (pawn.color[piece].k1[piece][0] == 'black'){ //error msg.
                    console.log('black');
                }
            }
   };

您的color數組有 16 個條目。 這些條目中的每一個都是以下形式的 object:

{ key: color }

其中key是“c1”到“c16”, color是“黑色”或“白色”。

在你的 for 循環中,你試試這個:

if (pawn.color[piece].k1[piece][0] == 'white'){

讓我們分解一下:

  • pawn.color[piece] - 這給出了一個 object 像{c1: 'white'}
  • pawn.color[piece].k1 - 這給出了undefined因為 object 沒有k1值。
  • pawn.color[piece].k1[piece] - 給出 TypeError 因為你試圖訪問undefined

你可能想要的是這樣的:

if (pawn.color[piece][k1[piece][0]] == 'white') {

但是,如果您將其拆分為如下所示,則更容易閱讀:

const firstKey = k1[piece][0];
if (pawn.color[piece][firstKey] == 'white') {

有時很難弄清楚如何使用對象訪問 arrays。 檢查語法,如果你不明白,請告訴我。

 pawn = { color: [ {c1: 'white'}, {c2: 'white'}, {c3: 'white'}, {c4: 'white'}, {c5: 'white'}, {c6: 'white'}, {c7: 'white'}, {c8: 'white'}, {c9: 'black'}, {c10:'black'}, {c11: 'black'}, {c12: 'black'}, {c13:'black'}, {c14:'black'}, {c15:'black'}, {c16:'black'} ]}; function payable() { k1 = []; for (i = 0; i < 16; i++) { k1.push(Object.keys(pawn.color[i])); // console.log(k1); //[['c1'], ['c2'], ['c3'], ['c4'], ['c5'], ['c6'], ['c7'], ['c8'], // ['c9'], ['c10'], ['c11'], ['c12'], ['c13'], ['c14'], ['c15'], ['c16']]; } for (piece = 0; piece < 16; piece++) { if (pawn.color[piece][k1[piece][0]] == 'white'){ //error msg. console.log('white'); } if (pawn.color[piece][k1[piece][0]] == 'black'){ //error msg. console.log('black'); } } }; payable();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM