如何将字符串转换为对象

5

我是一名编程新手,想通过开发一个小项目来提升自己的技能。

我正在使用HTML/JavaScript创建数独应用程序。我在HTML中有大量(81个)的“div”元素,并且我希望通过更改它们的innerHTML来为它们分配内容。使用两个for循环,我遍历所有81个变量,并重新创建它们的名称为“x”,然后将其传递给assign_cell()函数以组装代码。

puzzle_inc保存数独谜题本身(9..47.8.2..821..等等;“.”表示空单元格),我使用计数器函数逐个遍历其字符,将它们分配给每个“div”。

经过多次测试和搜索,我发现我的问题是x是“string”类型,而assign_cell()中的代码将无法工作。在这种情况下,x将始终等于类似“c01”的东西。

我一直在尝试将x转换为对象类型。我尝试使用JSON.parse()来解决问题,但由于对该领域的了解不足,我一直没有成功。

我不确定还有什么其他方法可以解决这个问题,但任何帮助都将不胜感激。

谢谢。

function assign_cell(flag, arr1, arr2) {
    if(flag === 1) {
        arr1.innerHTML = puzzle_inc[arr2];
    } else if(flag === 2) {
        arr1.innerHTML = null;
    } else {
        alert("Error in function assign_cell()");
    }   
}

for(var i = 0; i < 9; i++){
    for(var k = 0; k < 9; k++){
        var a = counter();
        var x = "c"+i+k;
        if(puzzle_inc[a] != '.') {
            assign_cell(1, x, a);
        } else {
            assign_cell(2, x, a);
        }
    }
}

编辑:我被要求提供整个代码,以更好地回答我的问题。请在下面找到它。谢谢答案!

PHP JS


为什么不把HTML部分也包含进来呢?这样可以帮助其他人更好地回答问题。 - Nitishkumar Singh
1
X不是HTML元素,因此您无法为其设置innerHTML。在assign_cell函数中,您需要执行类似于document.getElementById(arr1).innerHTML = puzzle_inc[arr2]的操作,但很难确定是否确实需要这样做,因为您尚未发布HTML,我们也不知道puzzle_inc变量是什么,或者counter()函数的作用是什么。当您打开控制台时,是否会收到任何错误消息?(快捷键通常是F12) - Our_Benefactors
正如@Our_Benefactors所评论的,x不是HTML元素,因此您不能像那样处理它。很可能,您需要一个函数来创建HTML元素并像id属性一样使用x,这应该是唯一的。 - Chris Tapay
哦,抱歉,我应该提到这个!之前,我使用“document.getElementByID”将每个HTML ID分配给JS变量。因此,如果x = c00,则实际上是document.getElementById('c00')。这是我的其余代码:https://pastebin.com/kJ4nEw75(PHP)和https://pastebin.com/qucy8077(JS)。 - Raduchi
1个回答

1

你有尝试过eval()函数吗?

var stringval='[1,2,3]';
var value=eval(stringval);
console.log(value);//=>[1, 2, 3]

谢谢您的建议!我之前尝试过将整个语句用它括起来(即eval(arr1.innerHTML = puzzle_inc[arr2]),但是当那样做不起作用时,我放弃了这种方法。然而,尝试eval(arr1).innerHTML = puzzle_inc[arr2]却真的奏效了!我不确定为什么 - 可能是JS评估了该字符串并将其视为变量名,因此用该变量替换了字符串?我不太清楚,但感谢您的帮助!问题已解决。 - Raduchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接