如何通过eval定义将字符串推送到数组
jsn_obj=[{"row":1,"integerz":1,"stringz":"a"},{"row":2,"integerz":2,"stringz":"b"}];
var getz = jsn_obj;
for (var i = 0, length = getz.length; i < length; i++)
{
console.log(getz[i].row);
eval("window.int_array_"+getz[i].row+"=[]");
eval("window.string_array_"+getz[i].row+"=[]");
eval("int_array_"+getz[i].row+".push("+getz[i].integerz+")");
eval("string_array_"+getz[i].row+".push("+getz[i].stringz+")");
console.log(eval("int_array_"+getz[i].row));
console.log(eval("string_array_"+getz[i].row));
}
我,尝试从循环创建数组并按照jsonobj / values初始化它,但在推送字符串时遇到引用错误(虽然它接受仅包含数字的字符串,例如:&#34; 123&#34;)我无法找出代码有什么问题..提前谢谢。
答案 0 :(得分:0)
在获得操作目标之前,我不会更新此答案。
字符串getz[i].stringz
连接不带引号,是标识符名称。查看示例:
string_array_1.push(a)
但预计:
string_array_1.push("a")
你可以在它周围加上引号
eval("string_array_" + getz[i].row + ".push('" + getz[i].stringz + "')");
这样浏览器肯定会抛出错误。考虑JSON.stringify
方法,它将返回字符串raw。
(@NiettheDarkAbsol注意。)
eval("string_array_" + getz[i].row + ".push(" + JSON.stringify(getz[i].stringz) + ")");
答案 1 :(得分:0)
可能你不需要eval
,你只需要研究如何访问对象属性......
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
var jsn_obj=[
{"row":1,"integerz":1,"stringz":"a"},
{"row":2,"integerz":2,"stringz":"b"}
];
var getz = jsn_obj; // ?
for (var i = 0, length = getz.length; i < length; i++)
{
var intArrayProp = "int_array_" + getz[i].row;
var stringArrayProp = "string_array_" + getz[i].row;
if(!Array.isArray(window[intArrayProp])) {
window[intArrayProp] = [];
}
if(!Array.isArray(window[stringArrayProp])) {
window[stringArrayProp] = [];
}
window[intArrayProp].push( getz[i].integerz );
window[stringArrayProp].push( getz[i].stringz );
}