Как присвоить значения от одного объекта к другому в JavaScript - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь присвоить значения из нижеприведенного объекта «детали» каждой «модели» в массиве «formFields».

Вот объект детализации

const details = {
    criteriaName: "hello",
    criteriaType: "type a",
    description: "world"
}

Вот массив formFields

Из вышеприведенного объекта сведений я пытался присвоить каждое значение из каждого ключа каждой модели из массива formFields

const formFields = [
    {
        "title": "Title 1",
        "columns": 2,
        "fields": {
            "criteriaName": {
                "type": "text",
                "label": "Criteria Name",
                "id": 'criteriaName',
                "model": "",
                "required": true,
                "show": true,
                "rules": [
                    v => !!v || 'Criteria Name is required',
                ]
            },
            "criteriaType": {
                "type": "select",
                "label": "Criteria type",
                "id": "criteriaType",
                "options": ['Dependent', 'Independent', 'Static'],
                "model": "",
                "required": true,
                "rules": [
                    v => !!v || 'Criteria Type is required',
                ],
                "show": true,
            },
        }
    },
    {
        'title': "Title 2",
        "columns": 1,
        "fields": {
            "description": {
                "type": "description_notes",
                "label": "Description",
                "id": "description",
                "required": false,
                "model": '',
                "show": true,
            }
        }
    }
]

Как мне этого добиться?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018
formFields.forEach((form) => {
    if (form.fields.criteriaName) form.fields.criteriaName.model = details.criteriaName;
    if (form.fields.criteriaType) form.fields.criteriaType.model = details.criteriaType;
    if (form.fields.description) form.fields.description.model = details.description;
})

Это внесет изменения в исходный массив.Вы можете прочитать больше о forEach здесь

, если вы хотите создать новый массив с изменениями, которые вы можете использовать:

let newFormFields = formFields.map((form) => {
    if (form.fields.criteriaName) form.fields.criteriaName.model = details.criteriaName;
    if (form.fields.criteriaType) form.fields.criteriaType.model = details.criteriaType;
    if (form.fields.description) form.fields.description.model = details.description;

    return form;
});

и вы можете прочитать больше о карте здесь

0 голосов
/ 19 декабря 2018

добро пожаловать в переполнение стека.Следующий код, вероятно, сделает то, что вы просите.Это немного, чтобы объяснить все детали, но вы можете спросить в комментариях и прочитать часть документации

const details = {
  criteriaName: 'hello',
  criteriaType: 'type a',
  description: 'world',
};

const formFields = [
  {
    title: 'Title 1',
    fields: {
      criteriaName: {
        id: 'criteriaName',
        model: '',
      },
      criteriaType: {
        id: 'criteriaType',
        model: '',
      },
    },
  },
  {
    title: 'Title 2',
    fields: {
      description: {
        id: 'description',
        model: '',
      },
      nonExisting: {
        id: 'nonExisting',
        model: 'this will not be replaced',
      },
    },
  },
];

const result = formFields.map((formField) => ({
  ...formField,
  fields: Object.entries(formField.fields).reduce(
    (fields, [key, value]) =>
      details[key]
        ? {
            ...fields,
            [key]: { ...value, model: details[key] },
          }
        : fields,
    formField.fields,
  ),
}));

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