【发布时间】:2019-08-31 16:41:21
【问题描述】:
我有一个“用户”数组和一个“订单”数组。 我想列出每个 user_id 的所有 order_id。
var users = {
0: {
user_id: 111,
user_name: "user111",
isActive: 0
},
1: {
user_id: 112,
user_name: "use112",
isActive: 1
},
2: {
user_id: 113,
user_name: "use113",
isActive: 0
},
...
};
var orders = {
888: {
order_id: 888,
user_id: 111
},
889: {
order_id: 889,
user_id: 111
},
890: {
order_id: 890,
user_id: 113
}
};
让我得到这个结果的最佳实践是什么(就效率而言) user_ids(user_id为key)到orders(orders ids数组的值):
result = {
111: [ 888, 889 ],
113: [ 890 ]
};
使用“用户”对象/数组是必须的,因为我的用户变量是一个过滤的用户列表,并且 userToOrder 数组应该获取某些特定用户的所有 order_id 并从中创建一个新对象。
- 没有 for 循环,只有纯 es6 功能。
- 除非不可能,否则尽量避免使用
.forEach()。 - 除非有“vanilla es6”示例,否则没有 loadash 答案。
这是我最后的尝试,但没有成功:
let userToOrdersArray = users.map( function(user) {
/*Object.values(orders).reduce((newObj, orderData) => {
newObj[user.user_id][] = orderData.order_id;
}, {});*/
Object.values(orders).filter(function(orderData) {
return (orderData.user_id === user.user_id);
});
});
console.log(userToOrdersArray);
【问题讨论】:
-
用户
112呢? -
您应该知道您使用的那些数字键会转换为字符串。我建议查看Map,因为它是专门为此类数据和这些任务设计的。
标签: javascript arrays ecmascript-6 functional-programming