2015-04-09 1 views
0

У меня есть массив как этотПрисвоить значения массива в другой массив называется динамически

pages['name'] = "Home"; 
pages['childs'][0]['name'] = "Sub page 1"; 
pages['childs'][1]['name'] = "Sub page 2"; 
pages['childs'][2]['name'] = "Sub page 3"; 
pages['childs'][2]['childs'][0]['name'] = "Sub sub page 1"; 

Моя проблема заключается в том, что мне нужно изменить части массива, например.

pages['childs'][0] = otherarray; 
// or 
pages['childs'][2]['childs'][0] = otherarray; 

Очевидно, что если otherarray была нитка я легко могу сделать что-то вроде

eval('pages' + where + ' = "' + stringvalue + '"'); 

Но я имею массив в качестве значения, так что я не могу сделать

eval('pages' + where + ' = "' + otherarray + '"'); 

, так как код будет проведено

pages['childs'][0] = [object object]; 

Какое решение? Благодаря

+0

Что вопрос? 'pages ['childs'] [0] = [object object];' действителен, если вы просто предупреждаете об этом ... это просто означает, что 'pages ['childs'] [0]' содержит объект. –

+0

@JohnGreen Я думаю, что у него есть переменная 'where =" ['childs'] [0] ", и он хочет использовать это, чтобы определить, что назначить. – Barmar

+0

В псевдокоде я должен сделать что-то вроде этого. eval ('pages' + where) = otherarray; –

ответ

-1

Для меня это решение работает

eval("pages" + where + " = JSON.parse('" + JSON.stringify(otherarray) + "')"); 

Это больше походит обходного то решение, но это работает, и для меня этого достаточно.

0

Вместо того, чтобы шуметь с помощью eval и стягивать вещи, вы должны просто создать аксессор. Многие согласятся с тем, что использование eval - это всего лишь плохая практика во всех отношениях. Я не знаю, добавляет ли его сочетание с stringify, что хуже, но, конечно же, он чувствует себя грязным.

Вот базовый, довольно глупый аксессуар, но он должен дать вам эту идею.

// Arguments: array to modify; new value; series of nested array keys. 
function modifyArray(base, value){ 
    var refObj = base; 
    for (var ii=2, max=arguments.length; ii < max; ii++){ 
     if (!refObj) { 
      return false; // we supplied an invalid key. 
     } 
     if (ii == max-1){ 
      refObj[arguments[ii]] = value; 
      return true; 
     } 
     refObj = refObj[arguments[ii]]; 
    } 
    return false; // probably forgot to include keys. 
} 

modifyArray(pages, otherarray, 'childs', 2, 'childs', 0); 

http://jsfiddle.net/2ts78brg/

+0

Это не решение. Мне нужен даже анализ для var где. –

+0

Я не знаю, откуда «откуда». В конце концов, его код, вы можете его построить и сохранить, как хотите, но с 20 лет написания кода я могу почти гарантировать, что ваше решение eval/stringify вернется и укусит вас плохо в какой-то момент. –

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