Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数编程/传递参数_Javascript_Functional Programming - Fatal编程技术网

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(…