带变量的Javascript引用对象属性

时间:2018-05-28 14:02:26

标签: javascript object

我有一个具有多个属性的对象Node和一个填充了这些属性名称的属性数组。我想通过for循环并使用节点中的属性值填充表单。代码如下:

function Node(parentNode, nodeID, fields, type){
    this.id =  nodeID;
    this.fields = fields;
    this.parent = parentNode;
    this.type = type;
    this.firstChild = null;
    this.lastChild = null;
    this.previousSibling = null;
    this.nextSibling = null;
}

var runTerminalNode = function(node, count){
    var form = document.createElement('form');
    form.setAttribute('method', 'GET');
    form.setAttribute('action', '/table/');
    form.setAttribute('target', '_blank');

    var attributes = ['id', 'fields', 'type']

    for (i in attributes){
        var input = document.createElement('input');
        input.type = 'hidden';
        input.name = attributes[i];
        input.value = node.attributes[i];
        form.appendChild(input);
    }
}

var nodeObject = allNodes[nodeID];
runTerminalNode = (nodeObject, 0);

其中allNodes是一个mapID,其中nodeID是键,Node对象是值。

我得到的错误是"无法读取属性' 0'未定义"因为node.attributes正在解析为undefined,并且它试图读取未定义数组中的第一个对象。我想要的是将它读作node.id,node.fields和node.type。有没有人知道解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

 for (i in attributes){

迭代数组 keys (0,1,2),它们不是对象的一部分。另外i是一个全局变量,由于各种原因这是很糟糕的。下一个问题是:

node.attributes[i]

这会查找"属性"节点节点中的属性,用于属性的位置i处的值,即:

node[ attributes[i] ]

可能会迭代值并声明变量:

for(const attr of attributes)
  console.log(node[attr]);

如果你真的想迭代索引,那就做:

for(const index of array.keys())
// OR
for(const [index, value] of array.entries())

继续阅读:

Iterating an array

Dot notation vs. Bracket notation