использование дочернего свойства для фильтрации всех родительских объектов - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь глубже погрузиться в JavaScript и
столкнулся с уникальным сценарием, в соответствии с которым данные представляются односторонним образом, но отображение зависит от дочерних свойств, определяющих организацию родительского элемента. (* есть ли термин для этого?)

Как я могу представить эти данные так, чтобы они были упорядочены по «формам». И, возможно, дело не в обращении данных, а в создании какого-то отношения.

Результатом должен стать клон. не изменять исходные данные.

либо чистый JavaScript, либо _.lodash.

Хороший ответ предложит метод для манипулирования данными, чтобы они могли быть представлены с помощью forms.name.

превосходный ответ продемонстрирует, как (показать код) манипулировать данными с form.name.

С учетом исходных данных, представленных в этом методе.

parent : {
    childOne: {
        canHide : true,
        canStop : false,
        forms : [
            {name: 'pathway 1', enabled: true},
            {name: 'pathway 2', enabled: false},
            {name: 'pathway 3', enabled: false}
        ]
    },
    childTwo: {
        canHide : true,
        canStop : false,
        forms : [
            {name: 'pathway 1', enabled: true},
            {name: 'pathway 2', enabled: false},
            {name: 'pathway 5', enabled: false},
            {name: 'pathway 7', enabled: false}
        ]
    }
},

Что я пытаюсь выяснить, так это как мне представить данные более похожими на это?

ПРИМЕЧАНИЕ: это child.forms.name может содержать пробелы.

newParent : {
    pathway 1 : {
        childOne: { enabled : true },
        childTwo: { enabled : false }
    },
    pathway 2 : {
        childOne: { enabled : false },
        childTwo: { enabled : false }
    },
    pathway 3 : {
        childOne: { enabled : true },
    },
    pathway 5 : {
        childTwo: { enabled : false }
    },
    pathway 7 : {
        childTwo: { enabled : false }
    }
},

Я не совсем уверен, что именно так должны быть структурированы данные.

Я пытаюсь узнать больше JavaScript.

Я думаю, что дисплей будет выглядеть так:

Pathway 1
    childOne .     [checkbox] => enabled : true|false
    childTwo .     [checkbox] => enabled : true|false  
...  
Pathway 7
    childTwo .     [checkbox] => enabled : true|false

Пока я пробовал:

Я сделал цикл for, основанный на длине формы. Имя в «родительском» объекте. Вставьте каждый файл forms.name в новый массив. использовал lodash uniq для возврата только уникального (дедупликация массива)

Оттуда я подумал, что должен быть способ снова зациклить родительский элемент, создав новый массив, в котором каждый дочерний элемент (childOne, childTwo и т. Д.) Добавляется под каждым именем form.name из уникального списка.

Но тогда мне все еще нужно вернуть свойство "enabled".

UGGGG должен быть лучший способ? Я читал кое-что о реляционных базах данных. Есть ли такой код, чтобы мне не пришлось изобретать велосипед?

1 Ответ

0 голосов
/ 01 мая 2018

Я играл с вашим кодом и в итоге получил:

var parent = {
    childOne: {
        canHide : true,
        canStop : false,
        forms : [
            {name: 'pathway 1', enabled: true},
            {name: 'pathway 2', enabled: false},
            {name: 'pathway 3', enabled: false}
        ]
    },
    childTwo: {
        canHide : true,
        canStop : false,
        forms : [
            {name: 'pathway 1', enabled: true},
            {name: 'pathway 2', enabled: false},
            {name: 'pathway 5', enabled: false},
            {name: 'pathway 7', enabled: false}
        ]
    }
};
var newParent = {};

// Here comes the funk(tion)!
Object.keys(parent).map(function(child, index1) {
  var forms = parent[child]['forms'];
  Object.keys(forms).map(function(pathway, index2) {
    var pw_name = forms[pathway]["name"];
    newParent[pw_name] = newParent[pw_name] || {};
    newParent[pw_name][child] = { "enabled": forms[pathway]["enabled"] };
  });
});

// Output
console.log(newParent);

Не стесняйтесь комментировать, если вы хотите, чтобы я что-то добавил.

В любом случае, надеюсь, это поможет!

...