有没有办法将字符串数组转换为对象集合?
Posted
技术标签:
【中文标题】有没有办法将字符串数组转换为对象集合?【英文标题】:Is there a way to turn an array of strings into object collection? 【发布时间】:2021-05-17 18:24:30 【问题描述】:基本上就是从这个['padding', 'children', 'className']
到这个:
padding: "padding",
children: "children",
className: "className",
我尝试了以下几种方法:
const arr = ['padding', 'children', 'className'];
const obj = Object.keys(arr).map((prop) => ( [prop]: prop ))`;
输出:
[padding: "padding", children: "children", className: "className"]
但是集合就像数组中的“独立”......请帮帮我!
【问题讨论】:
【参考方案1】:使用.reduce
:
const arr = ['padding', 'children', 'className'];
const res = arr.reduce((acc,item) =>
acc[item] = item; return acc;
, );
console.log(res);
【讨论】:
您能解释一下它是如何工作的吗?谢谢! @JoãoVictor 基本上它是一种迭代数组的技术,其中acc
最初设置为要更新的空对象
。在每次迭代中,我们使用索引处的元素(在本例中为item
)向对象添加一个新的键值对。最后,输出将是每个唯一项目的映射,如 key
和 value
。我添加了对文档的引用以获取更多详细信息。
使用reduce()
和Object.fromEntries()
有什么区别。有没有“推荐”的方式?
@JoãoVictor 都在这里完成这项工作,但是当使用 Object.fromEntries
时,您需要在将它们传递给函数之前遍历数组并创建对,而使用 .reduce
可以节省时间迭代在我看来更直接。【参考方案2】:
使用Object.fromEntries
和map
将其转成键值对形式:
const arr = ['padding', 'children', 'className'];
const result = Object.fromEntries(arr.map(k=>[k,k]));
console.log(result);
【讨论】:
谢谢!这是一个比使用reduce()
更简单的解决方案我猜...
只是为了好玩:您可以滥用Set 为您进行映射const obj = Object.fromEntries(new Set(arr).entries());
但请,这不是一个严肃的建议。不要在生产中这样做。至少不是没有像 10 行 cmets 在这里发生的事情以及您选择这样做的原因。以上是关于有没有办法将字符串数组转换为对象集合?的主要内容,如果未能解决你的问题,请参考以下文章