2014-11-28 2 views
0

Редактировать: спасибо, я неправильно использовал функцию eval, теперь это прекрасно работает: eval ('foo' + bar), instated of foo [eval (bar)] или eval (foo [бар]). Это было очень просто, наконец ...JS Array - преобразовать строку в ключ


По некоторым причинам, я должен преобразовать строку в допустимый индекс для доступа к элементам в сложном multidimensionnal массива. Например, предположим, что у меня есть это:

var foo = [ 
    [1,2,3], 
    [ 
     4, 
     [5,6] 
    ] 
]; 

var bar = [ 
    1: "[0][0]", 
    2: "[0][1]", 
    3: "[0][2]", 
    4: "[1][0]", 
    5: "[1][1][0]", 
    6: "[1][1][1]" 
]; 

var selectVal5 = foo[bar[5]]; 

Я попробовал несколько eval() трюков, но это не похоже на работу. Итак, любая идея решить это?

ответ

0

Если вы знаете имя многомерного массива, вы можете использовать

eval('foo' + bar). 

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

bar.match(/[0-9]+/g). 
+0

Да, выглядит хорошо, ошибка, которую я сделал, - это удвоить [] foo [[0] [0]], спасибо! –

0

Я пробовал простую оценку, и она работает.

var foo = [ 
    ['val1','val2'], 
    ['val3'] 
]; 
var bar = "[1][0]"; 
foo[eval(bar)].toString(); //added to String so that the brackets can be removed 
+0

Вы правы, я хотел упростить свои проблемы, но это не представляет реальной проблемы. Я только что редактировал свой пост, чтобы сделать его точным, извините за это! –

0

Он работает с использованием eval и String:

<input type="button" value="test" /> 
<div id="result"></div> 

Это сценарий:

$('input[type=button]').click(function() { 
    var foo = [ 
    ['val1','val2'], 
    ['val3'] 
    ]; 
    var bar = "[1][0]"; 
    var selectVal3 = String(foo[eval(bar)]); 

    $("#result").append(selectVal3); 
}); 

http://jsfiddle.net/pUeue/

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