我有一个像这样的数组
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 :(得分: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);
答案 1 :(得分:-1)
对我来说这个解决方案有效
eval("pages" + where + " = JSON.parse('" + JSON.stringify(otherarray) + "')");
这听起来更像是一种解决方法,然后是一种解决方案,但它对我而言是有效的。