【问题标题】: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"}]

但是集合就像数组中的“独立”......请帮帮我!

【问题讨论】:

    标签: javascript arrays string javascript-objects converters


    【解决方案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 在这里发生的事情以及您选择这样做的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多