如何解决从索引/键数组创建字符串对象路径
我正在使用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”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。