Javascript 使用字符串键访问数组

Javascript 使用字符串键访问数组,javascript,arrays,string,append,appendchild,Javascript,Arrays,String,Append,Appendchild,我从JSON对象tableobj生成html元素,并通过generate()函数将它们分配给数组elementArray,这非常有效,但问题是,当我将elementArray传递给assembly()函数时,我得到以下错误 未捕获的TypeError:无法读取未定义的属性“appendChild” 我想要的是让assemble()的输出构造表,它基于binding属性 例如:将追加到中,因此的绑定将是0,因为其父元素是元素数组[0],这将是。的相同模式将是00,因为它将是子元素0,而子元素将是,

我从JSON对象
tableobj
生成html元素,并通过
generate()
函数将它们分配给数组
elementArray
,这非常有效,但问题是,当我将
elementArray
传递给
assembly()
函数时,我得到以下错误

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

我想要的是让
assemble()
的输出构造表,它基于
binding
属性

例如:将
追加到
中,因此
的绑定将是0,因为其父元素是
元素数组[0]
,这将是
的相同模式将是00,因为它将是
子元素
0
,而子元素将是
,等等

//代码

<script>
var tableobj = [
        {table:{binding:""}},
        {thead:{binding:"0"}},
        {tbody:{binding:"0"}},
        {tr:{binding:"00"}},
        {th:{binding:"000"}},
        {th:{binding:"000"}},
        {th:{binding:"000"}}
];

function init(){
    //GENERATE HTML & BIND PROPERTIES
    var elementArray = generate(tableobj);
    console.log(elementArray);

    //ASSEMBLE THE TABLE --- example: elementArray[0].appendChild(thead) 
    var elementAssembly = assemble(elementArray);

    console.log(elementAssembly);
    console.log(elementAssembly[0]);
    //OUTPUT
    //TABlE->THEAD
    //TABlE->THEAD
    //TABlE->THEAD->TR
    //TABlE->THEAD->TR->TH
    //TABlE->THEAD->TR->TH
    //TABlE->THEAD->TR->TH
}
function assemble(o){   
    o.forEach(function(ele){
        var position = ele.position.replace(/0/g,"[0]");
        var position = ele.position.split('');
        if(ele.position.length > 0){
            //WHERE MY QUESTION LIES....
            var parent = o[position];
            parent.appendChild(ele);
        }
    });
    return o;
};
function generate(o){
    var struct = o.map(function(ele,i){
        var element = document.createElement(Object.keys(ele));
        for(prop in ele){
            var key = Object.keys(ele[prop]);
            key.forEach(function(attr){
                switch(attr){
                    case "binding":
                        Object.defineProperty(element,'position',{
                            value: ele[prop][attr]
                        });
                        break;          
                }
            });         
        }
        return element;
    })
    return struct;
}

//ONLOAD TRIGGER INIT
document.addEventListener('DOMContentLoaded', init);
</script>

变量tableobj=[
{表:{绑定:'}},
{thead:{绑定:“0”},
{tbody:{绑定:“0”},
{tr:{binding:'00}},
{th:{binding:'000}},
{th:{binding:'000}},
{th:{绑定:“000”}
];
函数init(){
//生成HTML&绑定属性
var elementArray=generate(tableobj);
log(elementArray);
//组装表---示例:elementArray[0].appendChild(thead)
var elementAssembly=assembly(elementArray);
控制台日志(elementAssembly);
console.log(elementAssembly[0]);
//输出
//表->THEAD
//表->THEAD
//表->磁带->磁带
//表格->主题->主题->主题->主题
//表格->主题->主题->主题->主题
//表格->主题->主题->主题->主题
}
函数汇编(o){
o、 forEach(功能(ele){
变量位置=元件位置替换(/0/g,“[0]”);
变量位置=元件位置拆分(“”);
如果(ele.position.length>0){
//我的问题在哪里。。。。
var parent=o[位置];
父母、子女(ele);
}
});
返回o;
};
函数生成(o){
var struct=o.map(函数(ele,i){
var元素=document.createElement(Object.keys(ele));
用于(ele中的支柱){
var key=Object.key(ele[prop]);
key.forEach(函数(attr){
开关(attr){
案例“绑定”:
Object.defineProperty(元素,'position'{
值:ele[prop][attr]
});
打破
}
});         
}
返回元素;
})
返回结构;
}
//加载触发器初始化
document.addEventListener('DOMContentLoaded',init);

我相信我了解您想要实现的目标:

取以下字符串和数组

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

eval("arr" + str);
=> "a"
在这里,您已经根据动态字符串将其放入数组中

此评估的等效代码为:

arr[0][0];

循环绑定中的字符,获取每个字符的子元素以深入到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);
    });
}
函数汇编(o){
o、 forEach(功能(ele){
var位置=电气位置;
如果(position.length==0){
返回;
}
var cur=o[0];
对于(变量i=1;i
也许你在找这个。它使用给定的路径作为数组
code
的索引

var path='[0][0][0]',
代码=[];
函数setValue(数组、路径、值){
var pathA=path.match(/\d+/g),
index=pathA.pop();//保存最后一个索引以供访问
路径还原(函数(r,a){
如果(!(r中的a)){
r[a]=[];
}
返回r[a];
},数组)[索引]=值;
}
函数getValue(数组、路径){
返回路径.match(/\d+/g).reduce(函数(r,a){
返回r[a];
},数组);
}
设置值(代码,路径,42);
document.write(''+JSON.stringify(代码,0,4)+'');

write(getValue(代码,路径))appendChind
?您正在使用DOM元素吗?如果是这样,请显示DOM树中的某些片段以及这些元素。我的输出将是附加到数组中正确节点上的元素。@RomanPerekhrest
myArray
是一个已经创建的HTML元素数组,我现在尝试循环并将它们附加到正确的位置。什么是
myArray
,什么是myelement
,您试图实现什么?你的解释对我来说毫无意义<代码>000不是一个长度。我试过了,但仍然不起作用。。。我在上面发布了我的完整源代码。我很难理解你发布的代码。这个答案是针对您的原始问题,其中
mystring
包含一系列数字数组索引,如
“[0][1][23]”
。我在您的代码中没有看到任何创建字符串的内容,如
[0][1][23]
forEach
语句对数组而不是字符串进行操作。是的,我尝试了不同的格式,但在这里我将编辑它
console.log(position)
.replace()
Ahh之后,我在
ele.position.replace(/0/g
中看到它。