javascript - 你如何遍历一个对象数组来创建一个新对象?
问题描述
我正在尝试遍历来自 WebSocket 连接的消息(这是一个对象数组)以创建一个新对象。这是原始数组:
[
{'id': 52, 'tag': 'RFS', 'price': 780},
{'id': 14, 'tag': 'XGH', 'price': 341},
{'id': 29, 'tag': 'LLP', 'price': 997},
]
我正在尝试使用这个数组来创建一个对象,并以tag
为键:
{
'RFS': {'id': 52, 'price': 780},
'XGH': {'id': 14, 'price': 341},
'LLP': {'id': 29, 'price': 997},
}
让这个对象= obj
。在 Python 中,我可以执行以下操作:
>>> new_obj = {i['tag']: {'id': i['id'], 'price': i['price']} for i in obj}
>>> new_obj
{'RFS': {'id': 52, 'price': 780}, 'XGH': {'id': 14, 'price': 341}, 'LLP': {'id': 29, 'price': 997}}
我将如何在 JS 中做这样的事情?我尝试过使用该map
功能,但无济于事。我也尝试使用reduce
:
var result = obj.reduce(function(new_obj, i) {
new_obj[i.tag] = {'id': i.id, 'price': i.price};
return new_obj;
}, {});
编辑:reduce
上面的方法对我来说是不成功的。我可能错过了一些愚蠢的东西,但控制台告诉我Each child in a list should have a unique "key" prop.
,它返回一个undefined
对象。
解决方案
这是一个解决方案reduce
:
const input = [
{'id': 52, 'tag': 'RFS', 'price': 780},
{'id': 14, 'tag': 'XGH', 'price': 341},
{'id': 29, 'tag': 'LLP', 'price': 997},
];
const output = input.reduce((acc, obj) => ({ ...acc, [obj.tag]: { id: obj.id, price: obj.price }}), {});
console.log(output);
推荐阅读
- javascript - AngularJS 和 Javascript 类 :: ERROR ReferenceError:
没有定义 - duplicates - 如何在 Tableau Desktop 中按列获取 NA 率?
- javascript - javascript获取有效响应
- arrays - Mongo 4.2:删除空字段
- php - 如何为不同的部署环境更新 PHP 文件路径
- momentjs - 是否可以将自定义案例添加到 moment.js '从现在开始的时间'
- python - 创建烧瓶模块并划分应用程序
- git - Cygwin git 删除可执行标志
- sql - SQL:将宽表转换为窄表
- c - 如何在 C 中将 unsigned short 转换为字符串?