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

Я пытался получить доступ к ключу, значения из массива ниже

Я пытаюсь получить доступ к ключам внутри объекта поля и значение из модели внутри ключейobject

formFields = [
        {
            "title": "Criteria Details",
            "columns": 2,
            "fields": {
                "criteriaName": {
                    "type": "text",
                    "label": "Criteria Name",
                    "id": 'criteriaName',
                    "model": "CRITERIA 1",
                    "required": true,
                    "show": true,
                    "rules": [
                        v => !!v || 'Criteria Name is required',
                    ]
                },
                "criteriaType": {
                    "type": "select",
                    "label": "Criteria type",
                    "id": "criteriaType",
                    "options": ['Dependent', 'Independent', 'Static'],
                    "model": "Dependent",
                    "required": true,
                    "rules": [
                        v => !!v || 'Criteria Type is required',
                    ],
                    "show": true,
                },
                "table": {
                    "type": "select",
                    "label": "Table",
                    "id": "table",
                    "options": ["Table1"],
                    "model": "Table1",
                    "required": true,
                    "rules": [
                        v => !!v || 'Table is required',
                    ],
                    "show": true,
                },
                "column": {
                    "type": "select",
                    "label": "Column",
                    "id": "column",
                    "options": ["Column1"],
                    "model": "Column1",
                    "required": true,
                    "rules": [
                        v => !!v || 'Column is required',
                    ],
                    "show": true,
                },
                "joinType": {
                    "type": "select",
                    "label": "Join Type",
                    "id": "joinType",
                    "options": ["AND", "OR"],
                    "model": "OR",
                    "required": true,
                    "rules": [
                        v => !!v || 'Join Type is required',
                    ],
                    "show": true,
                },
                "operator": {
                    "type": "select",
                    "label": "Operator",
                    "id": "operator",
                    "options": ["<", "<=", "<>", "=", ">=", ">", "EXISTS", "IN", "IS NOT NULL", "NULL", "LIKE", "NOT EXISTS", "NOT IN", "NOT LIKE"],
                    "model": ">=",
                    "required": true,
                    "rules": [
                        v => !!v || 'Operator is required',
                    ],
                    "show": true,
                },
                "valueType": {
                    "type": "select",
                    "label": "Value Type",
                    "id": "valueType",
                    "options": ["Dependent SQL", "SQL", "VALUE"],
                    "model": "SQL",
                    "required": true,
                    "rules": [
                        v => !!v || 'Value Type is required',
                    ],
                    "show": true,
                },
                "dataType": {
                    "type": "select",
                    "label": "Data Type",
                    "id": "dataType",
                    "options": ["DATE", "NUMBER", "STRING"],
                    "model": "NUMBER",
                    "required": true,
                    "rules": [
                        v => !!v || 'Data Type is required',
                    ],
                    "show": true,
                },
                "format": {
                    "type": "text",
                    "label": "Format",
                    "id": "format",
                    "model": "Config",
                    "required": false,
                    "show": true,
                },
                "parameterMandatory": {
                    "type": "select",
                    "label": "Parameter Mandatory",
                    "id": "parameterMandatory",
                    "options": ["NO", "YES"],
                    "model": "YES",
                    "required": true,
                    "rules": [
                        v => !!v || 'Parameter Mandatory is required',
                    ],
                    "show": true,
                },
                "link": {
                    "type": "select",
                    "label": "Link",
                    "id": "link",
                    "options": ["KB"],
                    "model": "KB",
                    "required": false,
                    "show": true,
                },
                "sequence": {
                    'type': "text",
                    "label": "Sequence",
                    "id": "sequence",
                    "model": "SEQ1",
                    "required": true,
                    "rules": [
                        v => !!v || 'Sequence is required',
                    ],
                    "show": true,
                },
                "value": {
                    "type": "description_notes",
                    "label": "Value",
                    "id": "value",
                    "model": "VAL",
                    "required": true,
                    "rules": [
                        v => !!v || 'Value is required',
                    ],
                    "show": true,
                }
            }
        },
        {
            'title': "Notes",
            "columns": 1,
            "fields": {
                "description": {
                    "type": "description_notes",
                    "label": "Description",
                    "id": "description",
                    "required": false,
                    "model": 'abcde',
                    "show": true,
                }
            }
        }
    ]

**** Вывод, который я пробовал, выглядит следующим образом. **** Как получить доступ к ключам и значениям из вышеуказанного массивакак это.Какой метод нам нужно использовать

criteriaDetails: [
    {"criteriaName": "CRITERIA 1"}, 
    {"criteriaType": "Dependent"},
    {"table": "Table1"},
    {"column": "Column1"},
    {"joinType": "OR"},
    {"operator": ">="},
    {"valueType": "SQL"},
    {"dataType": "NUMBER"},
    {"format": "Config"},
    {"parameterMandatory": "YES"},
    {"link": "KB"},
    {"sequence": "SEQ1"},
    {"value": "VAL"},
    {"description": "abcde"}
]

Я пробовал ниже код

const field = this.formFields.map(field => {
      return Object.entries(field.fields)
})
console.log(field)

как я могу этого достичь?Как это решить.Пожалуйста, помогите

Thanks..

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

const formFields = [{"title":"Criteria Details","columns":2,"fields":{"criteriaName":{"type":"text","label":"Criteria Name","id":'criteriaName',"model":"CRITERIA 1","required":!0,"show":!0,"rules":[v=>!!v||'Criteria Name is required',]},"criteriaType":{"type":"select","label":"Criteria type","id":"criteriaType","options":['Dependent','Independent','Static'],"model":"Dependent","required":!0,"rules":[v=>!!v||'Criteria Type is required',],"show":!0,},"table":{"type":"select","label":"Table","id":"table","options":["Table1"],"model":"Table1","required":!0,"rules":[v=>!!v||'Table is required',],"show":!0,},"column":{"type":"select","label":"Column","id":"column","options":["Column1"],"model":"Column1","required":!0,"rules":[v=>!!v||'Column is required',],"show":!0,},"joinType":{"type":"select","label":"Join Type","id":"joinType","options":["AND","OR"],"model":"OR","required":!0,"rules":[v=>!!v||'Join Type is required',],"show":!0,},"operator":{"type":"select","label":"Operator","id":"operator","options":["<","<=","<>","=",">=",">","EXISTS","IN","IS NOT NULL","NULL","LIKE","NOT EXISTS","NOT IN","NOT LIKE"],"model":">=","required":!0,"rules":[v=>!!v||'Operator is required',],"show":!0,},"valueType":{"type":"select","label":"Value Type","id":"valueType","options":["Dependent SQL","SQL","VALUE"],"model":"SQL","required":!0,"rules":[v=>!!v||'Value Type is required',],"show":!0,},"dataType":{"type":"select","label":"Data Type","id":"dataType","options":["DATE","NUMBER","STRING"],"model":"NUMBER","required":!0,"rules":[v=>!!v||'Data Type is required',],"show":!0,},"format":{"type":"text","label":"Format","id":"format","model":"Config","required":!1,"show":!0,},"parameterMandatory":{"type":"select","label":"Parameter Mandatory","id":"parameterMandatory","options":["NO","YES"],"model":"YES","required":!0,"rules":[v=>!!v||'Parameter Mandatory is required',],"show":!0,},"link":{"type":"select","label":"Link","id":"link","options":["KB"],"model":"KB","required":!1,"show":!0,},"sequence":{'type':"text","label":"Sequence","id":"sequence","model":"SEQ1","required":!0,"rules":[v=>!!v||'Sequence is required',],"show":!0,},"value":{"type":"description_notes","label":"Value","id":"value","model":"VAL","required":!0,"rules":[v=>!!v||'Value is required',],"show":!0,}}},{'title':"Notes","columns":1,"fields":{"description":{"type":"description_notes","label":"Description","id":"description","required":!1,"model":'abcde',"show":!0,}}}]
let result = []
formFields.forEach(item => {
    const entries = Object.entries(item.fields)
    entries.forEach(([key, { model }]) => {
        result.push({
            [key]: model
        })
    })
})
console.log(result)
0 голосов
/ 28 ноября 2018

Есть много способов сделать это.

Вы можете использовать метод Array.prototype.reduce(), чтобы уменьшить массив до одного значения, и использовать статический метод Object.entries, чтобы извлечь ключ и значение * 1005.*

const formFields=[{"title":"Criteria Details","columns":2,"fields":{"criteriaName":{"type":"text","label":"Criteria Name","id":'criteriaName',"model":"CRITERIA 1","required":!0,"show":!0,"rules":[v=>!!v||'Criteria Name is required',]},"criteriaType":{"type":"select","label":"Criteria type","id":"criteriaType","options":['Dependent','Independent','Static'],"model":"Dependent","required":!0,"rules":[v=>!!v||'Criteria Type is required',],"show":!0,},"table":{"type":"select","label":"Table","id":"table","options":["Table1"],"model":"Table1","required":!0,"rules":[v=>!!v||'Table is required',],"show":!0,},"column":{"type":"select","label":"Column","id":"column","options":["Column1"],"model":"Column1","required":!0,"rules":[v=>!!v||'Column is required',],"show":!0,},"joinType":{"type":"select","label":"Join Type","id":"joinType","options":["AND","OR"],"model":"OR","required":!0,"rules":[v=>!!v||'Join Type is required',],"show":!0,},"operator":{"type":"select","label":"Operator","id":"operator","options":["<","<=","<>","=",">=",">","EXISTS","IN","IS NOT NULL","NULL","LIKE","NOT EXISTS","NOT IN","NOT LIKE"],"model":">=","required":!0,"rules":[v=>!!v||'Operator is required',],"show":!0,},"valueType":{"type":"select","label":"Value Type","id":"valueType","options":["Dependent SQL","SQL","VALUE"],"model":"SQL","required":!0,"rules":[v=>!!v||'Value Type is required',],"show":!0,},"dataType":{"type":"select","label":"Data Type","id":"dataType","options":["DATE","NUMBER","STRING"],"model":"NUMBER","required":!0,"rules":[v=>!!v||'Data Type is required',],"show":!0,},"format":{"type":"text","label":"Format","id":"format","model":"Config","required":!1,"show":!0,},"parameterMandatory":{"type":"select","label":"Parameter Mandatory","id":"parameterMandatory","options":["NO","YES"],"model":"YES","required":!0,"rules":[v=>!!v||'Parameter Mandatory is required',],"show":!0,},"link":{"type":"select","label":"Link","id":"link","options":["KB"],"model":"KB","required":!1,"show":!0,},"sequence":{'type':"text","label":"Sequence","id":"sequence","model":"SEQ1","required":!0,"rules":[v=>!!v||'Sequence is required',],"show":!0,},"value":{"type":"description_notes","label":"Value","id":"value","model":"VAL","required":!0,"rules":[v=>!!v||'Value is required',],"show":!0,}}},{'title':"Notes","columns":1,"fields":{"description":{"type":"description_notes","label":"Description","id":"description","required":!1,"model":'abcde',"show":!0,}}}]

const output = formFields.reduce((accumulator, { fields }) => {
  return Object.assign(accumulator, Object.entries(fields)
    .reduce((accumulatorInside, [key, { model }]) => {
      accumulatorInside[key] = model;
      return accumulatorInside;
    }, {})
  )
}, {});

console.log(output);

Или вы можете использовать циклы

const output = {};

for (let index = 0; index < formFields.length; index++) {
  for (let key in formFields[index].fields) {
    if (formFields[index].fields.hasOwnProperty(key))
      output[key] = formFields[index].fields[key].model;
  }
}

console.log(output);

Вы также можете сделать это с помощью Array.prototype.forEach() (из ответа @ sureperformance, тоже поднимите голосование)

const output = {};

formFields.forEach(({ fields }) => {
  Object.entries(fields).forEach(([key, { model }]) => {
    output[key] = model;
  });
});

console.log(output);

Основная идея одинакова независимо.Вам нужно перебрать свойства и установить значения.

С точки зрения производительности: замыкания, которые выходят за пределы своей области действия, работают медленнее, чем функции, которые этого не делают, и циклы for...in являются самыми быстрыми, но наиболее многословными.использовать.

БУДЬТЕ ОСТОРОЖНЫ!У for...in петель есть некоторые предостережения!Причина, по которой я проверяю собственное свойство, состоит в том, чтобы предотвратить копирование любых прототипов.Это одна проблема с циклом.Вместо этого вы можете захотеть использовать цикл for с массивом, возвращаемым статическим методом Object.getOWnPropertyNames(), поскольку он безопаснее и не будет проходить через прототипы, но добавляет дополнительную сложность по времени.

Это, однако, соображениякогда вы не хотите использовать побочные эффекты (Array.prototype.forEach()) или вам нужно выжать из вашего кода как можно большую скорость.

0 голосов
/ 28 ноября 2018

Похоже, все, что вам нужно сделать, это перебрать каждый fields объект и извлечь ключ и свойство model из каждого:

const formFields=[{"title":"Criteria Details","columns":2,"fields":{"criteriaName":{"type":"text","label":"Criteria Name","id":'criteriaName',"model":"CRITERIA 1","required":!0,"show":!0,"rules":[v=>!!v||'Criteria Name is required',]},"criteriaType":{"type":"select","label":"Criteria type","id":"criteriaType","options":['Dependent','Independent','Static'],"model":"Dependent","required":!0,"rules":[v=>!!v||'Criteria Type is required',],"show":!0,},"table":{"type":"select","label":"Table","id":"table","options":["Table1"],"model":"Table1","required":!0,"rules":[v=>!!v||'Table is required',],"show":!0,},"column":{"type":"select","label":"Column","id":"column","options":["Column1"],"model":"Column1","required":!0,"rules":[v=>!!v||'Column is required',],"show":!0,},"joinType":{"type":"select","label":"Join Type","id":"joinType","options":["AND","OR"],"model":"OR","required":!0,"rules":[v=>!!v||'Join Type is required',],"show":!0,},"operator":{"type":"select","label":"Operator","id":"operator","options":["<","<=","<>","=",">=",">","EXISTS","IN","IS NOT NULL","NULL","LIKE","NOT EXISTS","NOT IN","NOT LIKE"],"model":">=","required":!0,"rules":[v=>!!v||'Operator is required',],"show":!0,},"valueType":{"type":"select","label":"Value Type","id":"valueType","options":["Dependent SQL","SQL","VALUE"],"model":"SQL","required":!0,"rules":[v=>!!v||'Value Type is required',],"show":!0,},"dataType":{"type":"select","label":"Data Type","id":"dataType","options":["DATE","NUMBER","STRING"],"model":"NUMBER","required":!0,"rules":[v=>!!v||'Data Type is required',],"show":!0,},"format":{"type":"text","label":"Format","id":"format","model":"Config","required":!1,"show":!0,},"parameterMandatory":{"type":"select","label":"Parameter Mandatory","id":"parameterMandatory","options":["NO","YES"],"model":"YES","required":!0,"rules":[v=>!!v||'Parameter Mandatory is required',],"show":!0,},"link":{"type":"select","label":"Link","id":"link","options":["KB"],"model":"KB","required":!1,"show":!0,},"sequence":{'type':"text","label":"Sequence","id":"sequence","model":"SEQ1","required":!0,"rules":[v=>!!v||'Sequence is required',],"show":!0,},"value":{"type":"description_notes","label":"Value","id":"value","model":"VAL","required":!0,"rules":[v=>!!v||'Value is required',],"show":!0,}}},{'title':"Notes","columns":1,"fields":{"description":{"type":"description_notes","label":"Description","id":"description","required":!1,"model":'abcde',"show":!0,}}}]
    
const output = [];
formFields.forEach(({ fields }) => {
  Object.entries(fields).forEach(([key, { model }]) => {
    output.push({ [key]: model });
  });
});
console.log(output);

({ fields}) разрушает объект, который вы передаете обратному вызову.Это будет эквивалентно

formFields.forEach((obj) => {
    Object.entries(obj.fields)

Object.entries вернет массив с двумя значениями, первое - это текущий ключ, а второе - объект, связанный с ключом.Вот почему вы можете снова выполнить деструктуру с помощью (([key, { model }]).

В качестве справки вы можете переписать все это как

formFields.forEach((curObj) => {
  Object.entries(curObj.fields).forEach(([key, fieldValues]) => {
    output[key] = fieldValues.model;
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...