1

我想弄清楚如何在 for 循环中连接一个对象;eval() 工作正常,但我希望获得最佳效率,我在 Google 上搜索的大部分内容让我相信 eval() 不是一个安全的选择。我已经查看了与 eval() 相关的其他示例,但是,似乎没有一个是相同的情况。

我是 Javascript 的初学者,如果这有一个简单的解决方案,我深表歉意。

objFunction: function () {
        var concat1;
        var concat2;
        $('table tbody tr').each(function (i) {
            i++;
            for (var x = 1; x <= 4; x++) {                   
                concat1 = 'obj1.obj2.obj3.step' + i + '[' + x + ']' + '.name';
                concat2 = 'obj1.obj2.obj3.step' + i + '[' + x + ']' + '.icon';

                console.log(eval(concat1));
                console.log(eval(concat2));
});
}

谢谢,

4

3 回答 3

2

好吧,您已经在使用括号表示法成员 operator了。也可以使用它stepN

function () {
    $('table tbody tr').each(function (i) {
        i++;
        for (var x = 1; x <= 4; x++) {
            console.log(obj1.obj2.obj3['step'+i][x].name);
            console.log(obj1.obj2.obj3['step'+i][x].icon);
        } // <-- you're missing this brace, btw
    });
}
于 2013-06-25T18:33:10.820 回答
1

代替:

concat1 = 'obj1.obj2.obj3.step' + i + '[' + x + ']' + '.name';
concat2 = 'obj1.obj2.obj3.step' + i + '[' + x + ']' + '.icon';
console.log(eval(concat1));
console.log(eval(concat2));

您可以使用:

console.log(obj1.obj2.obj3['step' + i][x].name);
console.log(obj1.obj2.obj3['step' + i][x].icon);

那会有同样的效果。obj1.obj2是一样的obj1['obj2']。那只是一种不同的符号。

此外,您for似乎缺少其右大括号 ( })。

于 2013-06-25T18:32:04.897 回答
0

这不是你想要的吗?

objFunction: function () {
    var concat1;
    var concat2;
    $('table tbody tr').each(function (i) {
        i++;
        for (var x = 1; x <= 4; x++) {                   
            console.log(obj1.obj2.obj3['step' + i][x].name);
            console.log(obj1.obj2.obj3['step' + i][x].icon);
    });
}

我没有对此进行测试,但它应该非常接近您的要求。尝试稍微尝试一下语法,并将嵌套的部分拆分为分配给其他变量的子表达式,以找出问题所在,如果它不能立即工作。

于 2013-06-25T18:35:21.517 回答