将数组值分配给另一个动态调用的数组

时间:2015-04-09 08:40:54

标签: javascript arrays

我有一个像这样的数组

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];

解决方案是什么?感谢

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:-1)

对我来说这个解决方案有效

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

这听起来更像是一种解决方法,然后是一种解决方案,但它对我而言是有效的。