Javascript 迭代过程的嵌套过滤-指数映射?

Javascript 迭代过程的嵌套过滤-指数映射?,javascript,arrays,google-apps-script,mapping,filtering,Javascript,Arrays,Google Apps Script,Mapping,Filtering,让我们从简单的形式开始。 假设您有这样一个简单的数据集:您希望检索每个资产的累计金额。 首先,我将根据资产值过滤(排列)数组 var对=[“欧元”、“美元”、“波普”、“dot”、“cad”、“溶胶”]; 对于(i=0;i,据我所知,问题不是指数型的。复杂性仍然是线性的,在扫描可用数据时只需添加更多标准 该技术是根据您试图分组以实现小计的字段来累积数据。例如,如果您想按年/月分组,则只需按年/月来定义小计存储桶。例如,当您循环arra中的条目时,您将有一个“20181”、“20182”、“20

让我们从简单的形式开始。 假设您有这样一个简单的数据集:您希望检索每个资产的累计金额。

首先,我将根据资产值过滤(排列)数组

var对=[“欧元”、“美元”、“波普”、“dot”、“cad”、“溶胶”];

对于(i=0;i,据我所知,问题不是指数型的。复杂性仍然是线性的,在扫描可用数据时只需添加更多标准

该技术是根据您试图分组以实现小计的字段来累积数据。例如,如果您想按年/月分组,则只需按年/月来定义小计存储桶。例如,当您循环arra中的条目时,您将有一个“20181”、“20182”、“20183”等存储桶y、 您将使用年/月标识存储桶,并将条目值添加到该小计存储桶中

如果要将其他字段作为小计分组的一部分(例如,货币和年/月),然后只需调整存储桶名称,以包括货币和年/月。也就是说,小计存储桶现在将是“~cad~20181~”、“~cad~20182~”、“~eur~20181~”,等等。这将按货币和年/月唯一标识小计存储桶。然后,与以前一样,在数组中循环条目时,使用v数组条目中的值,以标识该值所属的货币和年/月桶…请注意,在构造小计桶名称时,波浪号是分隔字段值的任意分隔符

a=[
{geo:“cad”,ym:20182,价值:3},
{geo:“欧元”,货币:20181,价值:1},
{geo:“pop”,ym:20182,value:2},
{geo:“美元”,货币:20181,价值:3},
{geo:“cad”,ym:20182,价值:3},
{geo:“溶胶”,ym:20181,数值:1},
{geo:“cad”,ym:20181,价值:3},
{geo:“pop”,ym:20182,value:2},
{geo:“流行音乐”,ym:20181,价值:5}
];
var结果=a.减少((总计,分录)=>{
让key='~'+entry.geo+'~'+entry.ym+'~';
总计[键]=(总计[键]| | 0)+entry.value;
返回总数;
}, {} );

console.log(result);
根据注释中的建议,您可以使用一个简单的查询:

E1:

=query(A:D,"select A,B,C,sum(D) where A is not null group by A,B,C ",1)

如果这不太麻烦的话,我有一个扩展名要问你。我试过你的脚本,我非常喜欢。它非常优雅,似乎适合我的情况,但我正在努力理解它背后的方法。a)你能更深入地解释一下段落背后的逻辑吗?b)你能把它翻译成非箭头式的语法吗?因为GAS不接受它,这让我不太容易理解。e、 g.当我输入总计[key]时,我无法理解我到底在做什么,或者为什么即使使用
“|”
,key仍然可读。对不起,我还是不太舒服fluent@JohnGalassi,我扩展了对该方法的解释。此外,我将分隔符从“|”改为“~”,因为管道字符在javascript中有很多用途,而我将其用作字符串分隔符可能会引起一些混淆。定义小计存储桶的键时,分隔符的选择通常是任意的…@JohnGalassi oh,“为什么即使使用“|”键仍然可读?”?对象属性名称可以包含几乎任何字符。例如,
obj={'!@#$%':12}
是允许的,尽管您不能使用点符号来检索对象属性<代码>对象!@$%
将抛出错误,但
obj['!@$%]
工作正常。@JohnGalassi,我有多年的软件开发经验,因此我确信我以前遇到过此问题的变体。另外,我发现如果我专注于问题的算法和一步一步的手动过程,那么就只需要弄清楚javascript必须应用于解决方案的工具。很高兴我能帮上忙。可能值得将此作为另一个stackoverflow问题与脚本的详细信息一起发布,因为不清楚这是如何发生的。您可以利用工作表公式,特别是函数来提取所需的数据。您需要了解部分实现SQL的Google。如果你需要用气体来完成这项工作,请检查下面的stackoverflow线程:谢谢,我会检查的tomorrow@DimuDesigns谢谢你的评论。我查了一下,结果发现这是我在过去几天里一直在寻找的东西。我已经考虑过使用DB方法,但我得出的结论是,我只能使用以下方法:。你告诉我的实际上是缓解,因为如果我理解得好,我可以把我的工作表作为我自己的数据库。我需要更详细地研究它,我可能会在这个小项目的第二个版本中使用它。谢谢你的评论,但我想用代码来解决它,而不是用公式;创建尽可能多的变量,包括不同的周数。我需要的不是简单地筛选值,而是创建不同的数据集,然后将它们写入单元格。@John查询确实会生成不同的数据,这不是简单的筛选。试试看!