2016-09-15 2 views
0

Мне не хватает простого правила синтаксиса, поэтому, возможно, вы можете указать на него.Javascript индексирует массив внутри объекта

У меня есть объект, определенный как следующий ...

var board = { 
    //this data structure was heavily discussed with Lydia Brothers. its current form is due to her help 
    state: { 
    flipped: true, 
    ballWasDroppedLastMove: false, 
    topPlace: 0, 
    bottomPlace: 0, 
    top: [[1,2,3,4,5,6],[7,8,9,10,11,99],[12,13,14,15,99,99],[16,17,18,99,99,99],[19,20,99,99,99,99],[21,99,99,99,99,99]], 
    bottom: [[0,0,0,0,0,0],[0,0,0,0,0,99], [0,0,0,0,99,99], [0,0,0,99,99,99], [0,0,99,99,99,99], [0,99,99,99,99,99]], 
    }, ... 

двутавровых сделать некоторые операции на объекте - в частности, я заинтересован в board.state.top.

При печати board.state.top на консоль я получаю что-то вроде следующую картину ...

enter image description here

Я хочу, чтобы получить доступ к значениям 12,11,0,0,99,99.

Мой опыт из других языков говорит мне, что я должен сделать что-то вроде этого ...

for (i=0; i<6; i++){ 
    console.log(pboard.state.top[i]) 
} 

... и это именно то, как я получил вышеуказанное изображение. Я пробовал что-то вроде board.state.top[i][j] (добавление дополнительного размера), но которое печатает значения 0,0,0,0,99,99

Как получить доступ к этим элементам?

Как предлагается ниже, я попробовал следующее (ни в коей мере) ...

var i; 
var j; 
for (i=0; i<6; i++){ 
    row = pboard.state.top[i]; 
    row.forEach(element => {console.log(element);}); 
    // for (j=0; j<6; j++){ 
    // console.log(top[j]) 
    // } 
} 
+0

Там нет значения '12,11,0,0 , 99,99' в массиве, который вы нам показали? – Bergi

+0

Снимок экрана, который вы опубликовали [предлагает] (http://stackoverflow.com/q/4057440/1048572), что [вы слишком рано смотрите на объект] (http://stackoverflow.com/q/23392111/1048572) – Bergi

+0

'board.state.top [i] [j]' должен работать ... Может быть, вы путаете порядки индекса? try 'board.state.top [j] [i]' – david

ответ

0

Чтобы упростить вещи, сделать это в систематическом порядке.

Сначала достаньте array из свойства board.state.top и сохраните его в переменной.

Затем итерации через элементы с использованием API forEach.

Пример:

var board = { 
 
    //this data structure was heavily discussed with Lydia Brothers. its current form is due to her help 
 
    state: { 
 
    flipped: true, 
 
    ballWasDroppedLastMove: false, 
 
    topPlace: 0, 
 
    bottomPlace: 0, 
 
    top: [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 99], [12, 13, 14, 15, 99, 99], [16, 17, 18, 99, 99, 99], [19, 20, 99, 99, 99, 99], [21, 99, 99, 99, 99, 99]], 
 
    bottom: [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 99], [0, 0, 0, 0, 99, 99], [0, 0, 0, 99, 99, 99], [0, 0, 99, 99, 99, 99], [0, 99, 99, 99, 99, 99]], 
 
    } 
 
} 
 

 
var that_row = board.state.top[2]; 
 
that_row.forEach(element => { console.log(element); });

+0

Я сделал редактирование сообщения. Я попробовал то, что вы предложили, но то же самое - напечатайте 0 и 99's –

+0

@ KendallWeihe Я проверил ваш обновленный пост. Итак, где я могу получить ожидаемые значения '12,11,0,0,99,99'? Ни один из ваших новых массивов не имеет значения 11 –

+0

проверяет комментарии сообщения, это было разрешено. благодаря! –

0

Попробуйте это. Он должен работать. Вам нужно будет достигнуть значения, а затем получить желаемое значение по одному. Что-то вроде этого

state.top.forEach(function(innerItem){ 
    innerItem.forEach(function(item){ 
     console.info(item); 
    }) 
}) 

Надеюсь, это поможет.

Счастливый обучения :)

+0

WTH is '&& state.top.length && state.top.length> 0' должно быть хорошо? – Bergi

+0

Легкий мальчик !!! вы можете пропустить его. Я сделал это в скрипке, поэтому просто проверил, присутствует ли значение и его массив. Не причинит вам вреда. – Vatsal

+0

Да, вы действительно должны пропустить это. Если вы хотите проверить массив, просто используйте 'if (Array.isArray (state.top))' - этого достаточно. – Bergi

0

Последующий фрагмент кода будет печатать каждое значение для него массива в пос собственности:

var board = { 
 
    //this data structure was heavily discussed with Lydia Brothers. its current form is due to her help 
 
    state: { 
 
    flipped: true, 
 
    ballWasDroppedLastMove: false, 
 
    topPlace: 0, 
 
    bottomPlace: 0, 
 
    top: [[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 99], [12, 13, 14, 15, 99, 99], [16, 17, 18, 99, 99, 99], [19, 20, 99, 99, 99, 99], [21, 99, 99, 99, 99, 99]], 
 
    bottom: [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 99], [0, 0, 0, 0, 99, 99], [0, 0, 0, 99, 99, 99], [0, 0, 99, 99, 99, 99], [0, 99, 99, 99, 99, 99]], 
 
    } 
 
} 
 

 
board.state.top.forEach(function(pos, topIndex) { 
 
    pos.forEach(function(v, i) { 
 
     console.log('From top index', topIndex, 'value in position', i, v); 
 
    }); 
 
});

+0

Не повезло, я думаю, что есть код в другом месте программы, который останавливает это от работы. Зачем он печатает на консоли разные значения? Ознакомьтесь с полным кодом здесь: http://codepen.io/garyyo/pen/mAdjVG?editors=1111 –

+0

Я решил оставить только код не ES6 во фрагменте, потому что, возможно, вы находитесь в среде без поддержки. Но console.log просто поможет вам в том, что происходит. Я дал вам код для печати каждой позиции и каждого значения позиции. Теперь вы можете использовать его, как хотите. –

Смежные вопросы