javascript - 使用reduce获取带有对象的对象
问题描述
我有以下形式的数组:
[
{key: "key1", value: value1}
{key: "key2", value: value2}
{key: "key3", value: value3}
...
]
我需要转换为以下形式:
{ { key1 : value1}, { key2 : value2}, { key3 : value3} }
如何用reduce()做到这一点?
我正在尝试使用此代码:
var someObject = this.someArray.reduce(function(acc, item) {
return { [item.key]: item.value};
}, {});
但我总是只得到最后一项而不是全部。
解决方案
问题在于你的回报
return acc + { [item.key]: item.value};
您不能对对象使用+
运算符。add
尝试以下操作:
acc[item.key] = item.value;
return acc
这假设您keys
都是独一无二的。请参阅下面的完整示例:
let x = [{
key: "key1",
value: 'value1'
},
{
key: "key2",
value: 'value2'
},
{
key: "key3",
value: 'value3'
},
].reduce((accumulatedValue, curentValue) => {
accumulatedValue[curentValue.key] = curentValue.value;
return accumulatedValue
}, {})
console.log(x);
推荐阅读
- crystal-lang - 如何在 Crystal 中的抽象类上指定实例方法?
- ios - 从下拉列表中选择排序选项时调用/执行集合视图重新加载
- node.js - 如何在 kotlin java 中像 nodejs 一样进行 module.exports
- rest - 如何加密数据库中的令牌
- node.js - 从 typegoose 模型到猫鼬模型的参考
- android - 使用 Volley 向返回 Session cookie 的服务器发出 post 请求,此时使用 cookie 管理器
- java - Java中类型对象的ArrayList - 我似乎无法弄清楚的错误
- android - 如何在 Android 中获取外部 USB 大容量存储路径?
- mysql - SQL:需要在 MySQL 中的相关表之间按优先级获取聚合状态
- c# - 与 TPT 代码优先实体框架中的引用约束冲突