从索引/键数组创建字符串对象路径

问题描述

我正在使用Zod来验证我的申请表的输入,并且当发生验证错误时,我收到一个errors数组,该数组具有一个message属性一个{{1} }属性

我需要将收到的path属性转换为path对象路径,以便可以使用它为React Final Form创建string

给出ValidationError

path

预期的["user","name"] ["company","name"] 对象路径:

string

令人惊讶的是,我没有在实现此功能的Stack Overflow,Google搜索或NPM上找到任何代码

解决方法

快速尝试:

const string_path = (path) =>
  path.reduce(
    (acc,item) => acc + (Number.isInteger(item) ? '[' + item + ']' : '.' + item),''
  ).substring(1);

console.log(string_path(["user","name"]));
console.log(string_path(["company","name"]));

编辑:因此,通过查看@vich的帖子,我了解到,如果您不指定reduce的话,reduce将很乐意使用数组的第一个元素作为累加器,因此这是一个略短的版本:

const string_path = (path) =>
  path.reduce(
    (acc,item) => acc + (Number.isInteger(item) ? '[' + item + ']' : '.' + item)
  );

console.log(string_path(["user","name"]));
console.log(string_path(["user"]));

,

您可以使用Array.reduce来实现所需的目标。

const paths = ["company","name"];

const result = paths.reduce((acc,item) => {
  return typeof item === "string" ?
    acc + "." + item :
    `${acc}[${item}]`

},"");

console.log(result.slice(1));

,

这很简单。值得您自己尝试。

["user","name"].reduce((string,item) => (typeof item === "number") ? string + "[" + item + "]" : string + "." + item)

“用户名”

["company",item) => (typeof item === "number") ? string + "[" + item + "]" : string + "." + item)

“ company [0] .name”