所以让我们想象一下我有一个像
这样的对象const foo = {
name: 'Name',
age: 23
}
所以我想在以下结构中映射这些值。
const var = {
_name?
_age?
_location?
}
_仅反映它们可以使用不同的名称,而不仅仅是_ + foo键名称
有没有一种方法可以代替它:
var._name = foo.name
var._age = foo.age
还有另一种方法可以做到这一点吗?因为我将在var结构中有一些键,而这些键在foo结构中不会出现。因此,如果按照我的建议去做,那么我最终将在新结构中得到一些未定义的值。
答案 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);