Javascript函数编程/传递参数
我最近开始尝试函数式编程,我正在尝试转换一个使用命令式编程编写的旧模块 假设我有两个对象数组,即Javascript函数编程/传递参数,javascript,functional-programming,Javascript,Functional Programming,我最近开始尝试函数式编程,我正在尝试转换一个使用命令式编程编写的旧模块 假设我有两个对象数组,即 orders: [ { idOrder: 1, amount: 100, customerId: 25, }, { idOrder: 2, amount: 200, customerId: 20, } ] customers: [ { customerId: 20, name: "John Doe", orders: []
orders: [
{
idOrder: 1,
amount: 100,
customerId: 25,
},
{
idOrder: 2,
amount: 200,
customerId: 20,
}
]
customers: [
{
customerId: 20,
name: "John Doe",
orders: []
},
{
customerId: 25,
name: "Mary Jane",
orders: []
}
]
我想把所有的订单推给他们各自的客户。有干净的方法吗
我已经试过了,但显然不起作用:
customers.orders = orders.filter((x) => {
if (x.customerId === customerId) {
customer.orders.push(x);
}
});
谢谢您可以使用a,首先获得所有客户,然后将订单推送到客户手中
var object={orders:[{idOrder:1,金额:100,customerId:25},{idOrder:2,金额:200,customerId:20}],客户:[{customerId:20,姓名:“John Doe”,订单:[]},{customerId:25,姓名:“Mary Jane”,订单:[]},
map=object.customers.reduce((m,a)=>m.set(a.customerId,a),新map);
object.orders.forEach(a=>map.get(a.customerId.orders.push(a));
console.log(object.customers)代码>您可以使用a并首先获取所有客户,然后将订单推送到客户手中
var object={orders:[{idOrder:1,金额:100,customerId:25},{idOrder:2,金额:200,customerId:20}],客户:[{customerId:20,姓名:“John Doe”,订单:[]},{customerId:25,姓名:“Mary Jane”,订单:[]},
map=object.customers.reduce((m,a)=>m.set(a.customerId,a),新map);
object.orders.forEach(a=>map.get(a.customerId.orders.push(a));
console.log(object.customers)代码>可能的解决方案:
for (c of customers){
c.orders.push(orders.filter( function(o){ return o.customerId === c.customerId} ));
}
可能的解决办法:
for (c of customers){
c.orders.push(orders.filter( function(o){ return o.customerId === c.customerId} ));
}
如果将客户
视为累加器,则可以将订单
与客户
作为初始值
注意:这会变异客户
,如果您不想将其作为副作用,则必须克隆客户
。此外,没有找到customerId的错误处理
var orders=[{idOrder:1,金额:100,客户ID:25},{idOrder:2,金额:200,客户ID:20}];
var客户=[{customerId:20,名称:“John Doe”,订单:[]},{customerId:25,名称:“Mary Jane”,订单:[]};
var客户\订单=订单。减少(
(累计,v)=>
{accum.find(
c=>c.customerId==v.customerId).orders.push(v);
返回累计;
},顾客);
控制台日志(客户订单)
如果您将客户
视为累加器,则可以订单
,将客户
作为初始值
注意:这会变异客户
,如果您不想将其作为副作用,则必须克隆客户
。此外,没有找到customerId的错误处理
var orders=[{idOrder:1,金额:100,客户ID:25},{idOrder:2,金额:200,客户ID:20}];
var客户=[{customerId:20,名称:“John Doe”,订单:[]},{customerId:25,名称:“Mary Jane”,订单:[]};
var客户\订单=订单。减少(
(累计,v)=>
{accum.find(
c=>c.customerId==v.customerId).orders.push(v);
返回累计;
},顾客);
控制台日志(客户订单)代码>您可以编写一个函数并将其传递给reduce方法,然后用map将其组合起来
只有一件事:一旦它被创造出来,它可能永远不会改变。您可以使用Object.assign和concat
var customersWithOrders = customers.map(function(customer) {
var relatedOrders = orders.filter(function(order) { return order.customerId === customer.customerId })
return Object.assign(
customer,
{
orders: customer.orders.concat(relatedOrders)
}
)
})
您可以编写一个函数并将其传递给reduce方法,然后用map将其组合
只有一件事:一旦它被创造出来,它可能永远不会改变。您可以使用Object.assign和concat
var customersWithOrders = customers.map(function(customer) {
var relatedOrders = orders.filter(function(order) { return order.customerId === customer.customerId })
return Object.assign(
customer,
{
orders: customer.orders.concat(relatedOrders)
}
)
})
请添加您拥有的代码和您尝试过的内容。对于Java,请参阅:@donlys-但问题不是关于Java,请添加您拥有的代码和您尝试过的内容。对于Java,请参阅:@donlys-但问题不是关于Java。这将把订单数组推送到customer.orders数组中。假设客户没有订单,您可以执行c.orders=orders.filter(…
这将把订单数组推送到customer.orders数组中。假设客户没有订单,您可以执行c.orders=orders.filter(…