使用字符串键访问数组

时间:2016-02-26 20:11:20

标签: javascript arrays string append appendchild

我正在从JSON对象tableobj生成html元素,并通过elementArray函数将它们分配给数组generate(),这很有用,但问题是当我通过{ {1}} elementArray函数我收到以下错误。

  

未捕获的TypeError:无法读取未定义的属性'appendChild'

我正在寻找的是assemble()的输出结构表,该表基于assemble()属性。

例如:将binding追加到<thead>因此<table>的绑定将为0,因为其父元素为<thead>,即elementArray[0]<table>的相同模式将为00,因为<tr>子元素<table>将为0,等等...

// CODE

<thead>

3 个答案:

答案 0 :(得分:1)

我相信我理解你想要完成的事情:

采用以下字符串和数组

var str = "[0][0]";
var arr = [["a"], ["b"]];

eval("arr" + str);
=> "a"

在这里,您已根据动态字符串括起来进入数组。

此eval的等效代码为:

arr[0][0];

答案 1 :(得分:1)

遍历绑定中的字符,获取每个元素的子元素以深入到DOM中。当你到达最后,将新元素作为孩子附加。

function assemble(o){   
    o.forEach(function(ele){
        var position = ele.position;
        if (position.length == 0) { 
            return;
        }
        var cur = o[0];
        for (var i = 1; i < position.length; i++) {
            cur = cur.children[position[i]];
        }
        cur.appendChild(ele);
    });
}

答案 2 :(得分:0)

也许你正在寻找这个。它使用给定的路径作为数组code的索引。

var path = '[0][0][0]',
    code = [];

function setValue(array, path, value) {
    var pathA = path.match(/\d+/g),
        index = pathA.pop(); //  save last index for access
    pathA.reduce(function (r, a) {
        if (!(a in r)) {
            r[a] = [];
        }
        return r[a];
    }, array)[index] = value;
}

function getValue(array, path) {
    return path.match(/\d+/g).reduce(function (r, a) {
        return r[a];
    }, array);
}

setValue(code, path, 42);
document.write('<pre>' + JSON.stringify(code, 0, 4) + '</pre>');
document.write(getValue(code, path));