Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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
Arrays 将一个数组的值与另一个数组相加_Arrays_Node.js_Sorting_Sum - Fatal编程技术网

Arrays 将一个数组的值与另一个数组相加

Arrays 将一个数组的值与另一个数组相加,arrays,node.js,sorting,sum,Arrays,Node.js,Sorting,Sum,如果我有一个像下面这样的数组,我能得到总数吗 [{"_id":"5e154cf38c52231ee19f8", "refunds":[ {"_id":"5e38f10a754fcf3d48015", "reason":"refund 1", "amount":50000, ]}, {"_id":"5e1578b48c52231ee19f8", "refunds":[ {"_id":"5e37e09ef9ea5e3784043",

如果我有一个像下面这样的数组,我能得到总数吗

[{"_id":"5e154cf38c52231ee19f8",
  "refunds":[
    {"_id":"5e38f10a754fcf3d48015",
     "reason":"refund 1",
     "amount":50000,
     ]},
 {"_id":"5e1578b48c52231ee19f8",
  "refunds":[
    {"_id":"5e37e09ef9ea5e3784043",
     "reason":"refund 1",
     "amount":100000,
    {"_id":"5e37e12a02c27c14580a1",
     "reason":"refund 2",
     "amount":100000,
    {"_id":"5e38f02b754fcf3d48015",
     "reason":"refund 3",
     "amount":50000,
     ]},
  {"_id":"5e1578b48c52231ee19f8",
   "refunds":[]
}]

我希望得到res=300000这应该是相对简单的,我们使用创建一个包含所有退款对象的平面数组,然后我们将使用来计算总金额

我已经在不支持.flatMap(ES2019之前)的JavaScript环境中添加了另一个函数sumRefundAmountsII

const data=[{u id:“5e154cf38c52231ee19f8”,“退款”:[{u id:“5e38f10a754fcf3d48015”,“原因”:“退款1”,“金额”:50000}},{u id:“5e1578b48c52231ee19f8”,“退款”:[{u id:“5e37e09ef9ea5e3784043”,“原因”:“退款1”,“金额”:100000},{u id:“原因”:“5E17E12A022C27C14580A1”,“原因”:“_id”:“5e38f02b754fcf3d48015”,“原因”:“退款3”,“金额”:50000}],{“_id”:“5e1578b48c52231ee19f8”,“退款”:[]}];
函数数量(数组){
//获得一系列退款。
const returns=array.flatMap(obj=>obj.returns);
//每次退款的总金额。
退货退款。减少((金额,退款)=>{
退货金额+退款金额;
}, 0);
}
console.log(“总金额:”,总金额(数据));
//如果您的JavaScript环境抱怨.flatMap,请使用此函数
函数SUMMOUNTSII(数组){
//如果我们没有平面图,请使用工作区。。。
const returns=[].concat.apply([],array.map(obj=>obj.returns));
//每次退款的总金额。
退货退款。减少((金额,退款)=>{
退货金额+退款金额;
}, 0);
}

console.log(“总金额(无平面图):”,sumRefundAmountsII(数据));
在回答之前…我假设两件事-

第一,您正在Java中寻找答案。第二,您可以在Java列表中以更简单的方式完成任务:

让我们制作2个课程退款和综合(包含列表)-

退款类-

package com.sabre.ticketing.dhs.service.create.domain;

public class Refund {

    String _id;
    String reason;
    int    amount;

    public Refund(String _id, String reason, int amount) {
        this._id = _id;
        this.reason = reason;
        this.amount = amount;
    }


    public int getAmount() {
        return amount;
    }

}
这里是复合类as-

package com.sabre.ticketing.dhs.service.create.domain;

import java.util.List;

public class Composite {

    String _id;
    List<Refund> refunds;

    public Composite(String _id, List<Refund> refunds) {
        this._id = _id;
        this.refunds = refunds;
    }

    public List<Refund> getRefunds() {
        return refunds;
    }
}

package com.sabre.ticketing.dhs.service.create.domain;
导入java.util.List;
公共类复合{
字符串_id;
列出退款清单;
公共组合(字符串_id,列表退款){
这个。_id=_id;
this.returns=退款;
}
公共列表获取退款(){
退还退款;
}
}
计算技术属于SumCalc类-

package com.sabre.ticketing.dhs.service.create.domain;

import java.util.ArrayList;
import java.util.List;

public class SumCalc {

    public static void main(String[] args){

        List<Composite> composites = List.of(new Composite("5e154cf38c52231ee19f8", List.of(new Refund("5e38f10a754fcf3d48015", "refund 1", 50000))),
                new Composite("5e154cf38c52231ee19f8",
                        List.of(new Refund("5e37e09ef9ea5e3784043", "refund 1", 100000),
                                new Refund("5e37e12a02c27c14580a1", "refund 2", 100000),
                                new Refund("5e38f02b754fcf3d48015", "refund 3", 50000))),
                new Composite("5e154cf38c52231ee19f8", new ArrayList<>()));
        // Basically get you Json converted into composites list.. for simplicity and dont want to jackson thing i have initialized list  as new ..

        Integer finalSum = composites.stream()
                .map(Composite::getRefunds)
                .flatMap(List::stream)
                .map(Refund::getAmount)
                .reduce((sum, val) -> sum + val)
                .orElse(0);

        System.out.println("final Sum is " + finalSum);

        }

}
package com.sabre.ticketing.dhs.service.create.domain;
导入java.util.ArrayList;
导入java.util.List;
公共类SumCalc{
公共静态void main(字符串[]args){
列表组合=列表(新组合(“5e154cf38c52231ee19f8”),列表(新退款(“5e38f10a754fcf3d48015”,“退款1”,50000)),
新的复合材料(“5e154cf38c52231ee19f8”,
(新退款(“5e37e09ef9ea5e3784043”,“退款1”,100000)列表,
新退款(“5e37e12a02c27c14580a1”,“退款2”,100000),
新退款(“5e38f02b754fcf3d48015”,“退款3”,50000)),
新组合(“5e154cf38c52231ee19f8”,新ArrayList());
//基本上把Json转换成复合列表。为了简单起见,我不想把列表初始化为新的。。
整数finalSum=composites.stream()
.map(复合::获取退款)
.flatMap(列表::流)
.map(退款::getAmount)
.减少((总和,val)->总和+val)
.orElse(0);
System.out.println(“最终金额为”+最终金额);
}
}
运行SumClac


最终金额为300000美元


进程结束,退出代码为0

此处插入了错误的json这是我改为json的查询结果:哇,我刚刚发现了关于flatMap的新信息。非常感谢,flatMap非常有用。它对于JavaScript来说是非常新的(这可能是为什么你以前没有看到过它!)。它在ES2019(ES10)中成为语言的一部分。“array.flatMap不是函数“我想,我很清楚你是怎么做的。但仍然有错误。这可能是因为您使用的是稍旧的JavaScript版本。我将提供一个解决方案,不需要flatMap来解决这个问题!运行完美,我打算分别使用.map和.flat。但更好的理解是,在NodeJS(javascript)中它是相同的吗?根据我在javascript中的有限知识,我还没有看到数组列表,但请检查一下。老实说,我是用Java回答的,我想你可能也在用Java来回答。如果你醒来,我会从中引用它