【问题标题】:How can I map an Object into another one?如何将一个对象映射到另一个对象?
【发布时间】:2019-06-12 22:26:32
【问题描述】:

假设我有一个像

这样的对象
const foo = {
 name: 'Name',
 age: 23
}

所以我想将这些值映射到以下结构中。

const var = {
 _name?
 _age?
 _location?
}

_只反映他们可以有不同的名字他们不仅仅是_+ foo键名

有没有办法我可以做到这一点而不是这样做:

var._name = foo.name
var._age = foo.age

还有其他方法可以做到这一点吗?因为我将在 var 结构中有一些键,这些键不会出现在 foo 结构中。所以如果我按照我的建议去做,那么我最终会在新结构中得到一些未定义的值。

【问题讨论】:

    标签: javascript arrays typescript


    【解决方案1】:
     const result = Object.fromEntries(
       Object.entries(foo).map(([k, v]) => (["_" + k, v]))
     );
    

    对象可以作为键值对进行迭代。

    或者,如果您想逐个替换属性,请使用 Object.assign:

     const result = Object.assign({},
       foo.original && { renamed: foo.original },
       foo.original2 && { renamed2: foo.original2 }
     });
    

    确定可以移动到辅助函数中:

     const rename = mapper => obj => Object.assign(...Object.entries(mapper).map(([o, n]) => obj[o] && { [n]: obj[o] }));
    
    /* Or more pragmatic:
    const rename = mapper => obj => {
      const result = {};
      for(const [o, n] of Object.entries(mapper)) if(o in obj) result[n] = obj[o];
      return result;
    };
    */
    
     const result = rename({original: "renamed", original2: "renamed2" })(foo);
    

    【讨论】:

    • 嗯 _ 只是表示它们不同。我应该指定的。
    • @LuisPinto 是的,你应该有。在您编辑问题之前,此答案是正确的。
    • 顺便说一句,感谢您关注Object.fromEntries()。这对于许多常见的对象操作将非常方便
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多