是否有对象的`.map`之类的函数?用相同的键创建一个新对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有对象的`.map`之类的函数?用相同的键创建一个新对象相关的知识,希望对你有一定的参考价值。
对于数组,我们可以使用.map
方法创建具有相同数组结构(即,元素数量相同)的新地图。
例如
const array = [2, 4, 6];
const newArray = array.map(v => v *2); //[4, 8, 12];
我相信在函数式编程中,这使数组对象成为所谓的functor。
对于对象,我想做类似的事情-我想创建一个具有与原始对象相同的结构(相同的键)以及相同的功能等的新对象。
例如
const obj = {
foo: 2,
bar: 4,
biz: 6
};
const newObj = obj.map(v => v *2); // {foo: 4, bar: 8, biz: 12}
我当前执行此操作的方式是使用Object.entries
和.reduce
:
const obj = {
foo: 2,
bar: 4,
biz: 6
};
const newObj = Object.entries(obj).reduce((acc,cur) => {
return {
...acc,
[cur[0]]: cur[1] * 2
}
}, {});
console.log(newObj);
我想知道-当前是否存在对象方法,该方法可以让我执行我丢失的操作?还是提议增加一个?
答案
[没有对象的本机映射,但是可以轻松创建一个。我认为条目是最简单的。
const obj = {
foo: 2,
bar: 4,
biz: 6
}
const objMap = (obj, fn) =>
Object.fromEntries(
Object.entries(obj).map(fn)
)
console.log(
objMap(obj, ([k, v]) => [k, v * 2])
)
另一答案
使用.reduce()
的另一种方法是这样的,利用解构来读取内容要容易一些(我认为)
const obj = {
foo: 2,
bar: 4,
biz: 6
};
const newObj = Object.entries(obj).reduce((acc, [key, value]) => {
acc[key] = value * 2;
return acc;
}, {});
console.log(newObj)
另一答案
一种方法:
const obj = {
foo: 2,
bar: 4,
biz: 6
};
const x = Object.keys(obj).map(o => {
return {[o]: obj[o] * 2}
})
console.log(JSON.stringify(x, null, 2))
以上是关于是否有对象的`.map`之类的函数?用相同的键创建一个新对象的主要内容,如果未能解决你的问题,请参考以下文章