Обновление неизвестного неизменного. js Структура карты - PullRequest
0 голосов
/ 25 февраля 2020

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

Пример:

const errors = Immutable.fromJS({
  clients: [
    {
      users: {
        names: ["Joseph", "John"],
        items: ["Passport", "ID"],
      },
    },
  ],
  items: {
    data: {
      codes: ["543", "765", "549"],
    },
  },
});

Желаемый вывод:

const errors = Immutable.fromJS({
  clients: [
    {
      users: {
        names: "Joseph,John",
        items: "Passport,ID",
      },
    },
  ],
  items: {
    data: {
      codes: "543,765,549",
    },
  },
});

В этом случае мне нужно объединить все строки внутри вложенных массивов (списков). Я могу присоединиться к вложенному массиву, но сначала мне нужно как-то добраться до него. Я думал о получении вложенной структуры Map, но не нашел для нее метода (только для ключей того же уровня). Можно ли это сделать в Неизменном. js? Если да, то как?

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете просто использовать рекурсивность для анализа и обновления списков, содержащих строки / числа:

let errors = Immutable.fromJS({
  clients: [
    {
      users: {
        names: ["Joseph", "John"],
        items: ["Passport", "ID"],
      },
    },
  ],
  items: {
    data: {
      codes: ["543", "765", "549"],
    },
  },
});

const update = (object) => {

    if (typeof object.map === 'function') {
        return object.map((value) => {
            if (Immutable.List.isList(value) && 
                value.every((val) => ['string', 'number'].includes(typeof val))
            ) {
                return value.join();
            }
            
            return update(value);
        });
    }
    
    return object;
}

errors = update(errors);

console.log(errors);
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...