JavaScript:如何重命名对象中的所有键(处理第一级中的所有键)?

3
我想在一个对象的第一层键上添加前缀。
为了减少歧义,我希望展示Python中使用字典推导式实现此目的的优雅方法(我正在寻找JavaScript中类似的方法)。
>>> old = {"a": 1, "b": 2}
>>> prefix = "_"
>>> new = {prefix + key: value for key, value in old.items()}
>>> new
{'_a': 1, '_b': 2}

现代JavaScript中有什么同样优雅且易读的方法来完成这个任务,最好能在NodeJS 12中使用?

3个回答

6
通过Object.entries()将对象转换为条目。使用Array.map()迭代条目并更新键名。再使用Object.fromEntries()将条目转换为对象:

const old = {"a": 1, "b": 2}
const prefix = "_"

const result = Object.fromEntries(
  Object.entries(old).map(([k, v]) => [`${prefix}${k}`, v])
)

console.log(result)


1
刚刚发现了fromEntries,我又删除了我的回答。你更快一步了。 :) - Dr. Jan-Philip Gehrcke
1
在这里补充一下:Object.fromEntries 是相当新的,它是 ECMAScript 2019 中的初始定义。但它已经可以在 Node 12 中使用了。谢谢! - Dr. Jan-Philip Gehrcke
1
另外需要注意,在Typescript的tsconfig.json中,需要设置"target": "es2019"才能进行编译。 - Dr. Jan-Philip Gehrcke

2

var json = {'k': 'v', 'm': 'n'};
var prefix = '_';

var val = Object.assign(
  {},
  ...Object.keys(json).map(key => ({[prefix+key]: json[key]}))
)

console.log(val);


1
我建议使用Object.entries和reduce的组合,我认为相比其他解决方案,这将对对象进行更少的迭代。

const obj = {"a": 1, "b": 2};

const newObj = Object.entries(obj).reduce((acc, [key, value]) => {
  acc[`_${key}`] = value;
  return acc;
}, {});

console.log(newObj);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接