有没有办法将字符串数组转换为对象集合?

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)向对象添加一个新的键值对。最后,输出将是每个唯一项目的映射,如 keyvalue。我添加了对文档的引用以获取更多详细信息。 使用reduce()Object.fromEntries() 有什么区别。有没有“推荐”的方式? @JoãoVictor 都在这里完成这项工作,但是当使用 Object.fromEntries 时,您需要在将它们传递给函数之前遍历数组并创建对,而使用 .reduce 可以节省时间迭代在我看来更直接。【参考方案2】:

使用Object.fromEntriesmap将其转成键值对形式:

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 在这里发生的事情以及您选择这样做的原因。

以上是关于有没有办法将字符串数组转换为对象集合?的主要内容,如果未能解决你的问题,请参考以下文章

怎样将JAVA中得list集合转换为javascript的二维数组?

怎么把对象数组转换为集合

将集合转换为数组?

有没有办法将 json 对象转换为 json l 文件

在对象数组中转换字符串

PHP - 有没有办法将字符串中的数组转换为 PHP 中的有效数组?