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

Javascript 如何将一个对象映射到另一个对象?,javascript,arrays,typescript,Javascript,Arrays,Typescript,让我们想象一下,我有一个像 const foo = { name: 'Name', age: 23 } 所以我想在下面的结构中映射这些值 const var = { _name? _age? _location? } _只反映它们可以有不同的名称它们不仅仅是uuo+foo键名称 我有没有办法做到这一点,而不是: var._name = foo.name var._age = foo.age 还有别的办法吗?因为我将在var结构中有一些键,这些键在foo结构中不会出现。如果我按照我

让我们想象一下,我有一个像

const foo = {
 name: 'Name',
 age: 23
}
所以我想在下面的结构中映射这些值

const var = {
 _name?
 _age?
 _location?
}
_只反映它们可以有不同的名称它们不仅仅是uuo+foo键名称

我有没有办法做到这一点,而不是:

var._name = foo.name
var._age = foo.age
还有别的办法吗?因为我将在var结构中有一些键,这些键在foo结构中不会出现。如果我按照我的建议去做,那么在新的结构中我会得到一些未定义的值

 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);
对象可以作为键值对进行迭代

或者,如果要按属性替换属性,请使用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);

Hmmm_uu只是表示它们是不同的。我本应该指定的。是的,你应该指定的。在您编辑问题之前,此答案是正确的。顺便说一句,感谢您让我关注Object.fromEntries。这对于许多常见的对象操作非常方便HMMM只是表示它们是不同的。我本应该指定的。是的,你应该指定的。在您编辑问题之前,此答案是正确的。顺便说一句,感谢您让我关注Object.fromEntries。这对于许多常见的对象操作来说非常方便