javascript - 将对象中的所有键转换为新对象

标签 javascript object

假设我有一个类似于以下内容的对象:

const obj = {
  key1: 'ajklwenrvadva',
  key2: 'bgqo420v232',
  key3: '3ou4hfv34hc'
  // ...
}

其中 key 的每个值都是正在接收的加密字符串。

我最近遇到了一个问题,我觉得应该有一种方法来迭代对象中的所有键,转换值(在本例中解密),然后插入到新对象中。

我当前使用的解决方案是执行如下循环:

const newObj = {}
for (const key of Object.keys(obj)) newObj[key] = decrypt(obj[key])

它工作得很好,但是出于我自己的好奇心和理智,有没有一种方法可以使用 reduce 或类似的方法来完成同样的事情?

最佳答案

这完全没有道理,但据我所知,标准 JavaScript 库中没有像 map 这样的对象。

您会看到人们(ab)使用 reduce 来实现此目的:

const newObj = Object.keys(obj).reduce((newObj, key) => {
    newObj[key] = decrypt(obj[key]);
    return newObj;
}, {});

...也可以使用逗号运算符编写 (ab):

const newObj = Object.keys(obj).reduce((newObj, key) => (newObj[key] = decrypt(obj[key]), newObj), {});

...但坦率地说,我从来不喜欢它,尤其是因为很容易忘记从迭代器返回 newObj,得到错误,并且必须返回并添加它。 (对我来说,如果“累加器”没有改变,reduce是错误的答案,并且在上面传递的对象引用永远不会改变。)我只是使用for-of (正如您所做的那样)或 forEach:

const newObj = {};
Object.keys(obj).forEach(key => {
    newObj[key] = decrypt(obj[key]);
});

(或者在某些项目中,如果我发现自己在重复它,则可以使用一个实用函数来实现它。)

关于javascript - 将对象中的所有键转换为新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48191409/

相关文章:

javascript - 搜索 javascript 对象或对象数组最有效

java - 使用 Java comparable 按名称对对象进行排序

javascript - 从对象中删除所有属性

javascript - 添加验证到动态创建的具有唯一名称的输入字段

javascript - 编辑器 block 的动态高度

javascript - Google map 未以 html 形式显示

python - 从同一个模块导入同一个对象,在两个不同的模块 :

javascript - 嵌套匿名函数中的 CoffeeScript 类属性

javascript - Javascript 中的对象构造函数和返回值

javascript - JavaScript 中的对象微积分