更新未知 Immutable.js 地图结构

Updating unknown Immutable.js Map structure

我的任务是更新我不知道路径的深层嵌套值,因为数据是动态的。

示例:

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 嵌套结构,但还没有找到方法(仅针对同一级别的键)。这可以在 Immutable.js 中完成吗?如果可以,怎么做?

您可以简单地使用递归来解析和更新包含 strings/numbers:

的列表

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>