是否有对象的`.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`之类的函数?用相同的键创建一个新对象的主要内容,如果未能解决你的问题,请参考以下文章

Java是否有纯粹的函数不可变Map实现?

js 中判断字典中是不是有key

Java中对象作map的键,put的时不能覆盖原值

map中键为对象,用js将map中的键取出时,如何取出对象,以及它的属性

JS新增对象Map、Set

如何将java类对象作为mapreduce中map函数的输入?