问题描述
我正在使用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”