Карта изменил поля, установив новое значение для списка - PullRequest
0 голосов
/ 18 января 2019

Мне нужно отобразить поля, которые были изменены, проверив, какой ключ поля был изменен, и создав новый ключ со значением, которое будет отображаться на экране пользователю.

log: [
    0: {type: "Changed", fields_changed: Array(2), date_modification: Timestamp, modified_by: "ID_USER"}
    1: {type: "Changed", fields_changed: Array(4), date_modification: Timestamp, modified_by: "ID_USER"}
    2: {type: "Changed", fields_changed: Array(2), date_modification: Timestamp, modified_by: "ID_USER"}
    3: {type: "Changed", fields_changed: Array(4), date_modification: Timestamp, modified_by: "ID_USER"}
]

fields_changed: [
    0: {key: "name", value: "New name"}
    1: {key: "age", value: 22}
]

Мне нужно сопоставить его с fieldsNames, чтобы проверить имя поля и создать новый объект журнала для отображения пользователю.

const fieldsNames = [
    {key: 'name', field_name: 'Name'},
    {key: 'age', field_name: 'Age'},
]

При этом я бы создал новый список журналов с именами полей вместо имени ключа поля.

Пример:

fields_changed: [
    0: {key: "name", value: "New name", field_name: "Nome"}
    1: {key: "age", value: 22, field_name: "Age"}
]

Для каждого объекта у меня будет новый список внутри клавиши fields_changed с новым ключом с именем field_name, чтобы я мог отобразить на экране для пользователя имя поля, которое было изменено.

При этом у меня будет новый список журналов с измененным списком fields_changed, как указано выше.

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

1 Ответ

0 голосов
/ 19 января 2019

Хорошо,

Если я правильно вас понял, это должно вам помочь. Он создает новый объект журнала с массивом fields_changed, содержащим {key: string, field_name: string, value: string,} объекты.

Вот рабочий пример, я немного изменил ваш пример для простоты.

const log = [
    {
        type: "Changed", 
        fields_changed: [
            { key: "name", value: "New name" },
            { key: 'city', value: 'new york' }
        ]
    },
    { 
        type: "Changed", 
        fields_changed: [
            { key: "age", value: '10' }
        ] 
    },
]

const fieldsNames = [
    { key: 'name', field_name: 'Name' },
    { key: 'age', field_name: 'Age' },
    { key: 'city', field_name: 'City' }
]


const changes_for_display = log
    // loop through log object.
    .map(change => ({

        // for every object, map its fields_changed property,
        fields_changed: change.fields_changed.map(field_change => {

            // Look for a field in fieldsNames with same key as field_change.
            const field = fieldsNames.find(name => name.key === field_change.key);
            if (!field) {
                throw 'Field ' + field_change.key + ' NOT FOUND....';
            }

            // build new field_change object out of it,
            // basaically, just asasign value property..
            return Object.assign(field, { value: field_change.value })

        }), type: change.type })
    );


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