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。这对于许多常见的对象操作来说非常方便