如何将一个对象映射到另一个对象?

时间:2019-06-12 22:26:32

标签: javascript arrays typescript

所以让我们想象一下我有一个像

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

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

const var = {
 _name?
 _age?
 _location?
}

_仅反映它们可以使用不同的名称,而不仅仅是_ + foo键名称

有没有一种方法可以代替它:

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

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

1 个答案:

答案 0 :(得分:4)

 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);