无法在eval数组中推送字符串

时间:2016-09-11 13:41:04

标签: javascript jquery

如何通过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;)我无法找出代码有什么问题..提前谢谢。

2 个答案:

答案 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 );
}