微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在使用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 举报,一经查实,本站将立刻删除。