Атрибут ссылочного объекта Javascript с переменной - PullRequest
0 голосов
/ 28 мая 2018

У меня есть объектный узел с несколькими атрибутами и массив атрибутов, который заполнен именами этих атрибутов.Я хочу пройти через цикл 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 - это карта, где nodeID - это ключ, а объект Node - это значение.

Ошибка, которую я получаю: «Не могу прочитать»свойство '0' из неопределенного ", так как node.attributes разрешается в неопределенное, и он пытается прочитать первый объект в неопределенном массиве.Я хочу, чтобы он читал как node.id, node.fields и node.type.Кто-нибудь знает способ решения этой проблемы?

1 Ответ

0 голосов
/ 28 мая 2018
 for (i in attributes){

Это перебирает массивы ключей (0, 1, 2), и они не являются частью объекта.Кроме того, i - это глобальная переменная, которая плоха по разным причинам.Следующая проблема здесь:

node.attributes[i]

Это ищет свойство "attribute" в узле узла для значения в позиции i атрибутов, которое будет:

node[ attributes[i] ]

Mightвместо этого переберите значения и объявите переменную:

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

Если вы действительно хотите перебирать индексы, просто выполните:

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

, читайте:

Итерация массива

Точечная нотация и нотация в скобках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...