为了账号安全,请及时绑定邮箱和手机立即绑定

计算2D数组中的发生次数,并将自定义公式结果放在数组的末尾

计算2D数组中的发生次数,并将自定义公式结果放在数组的末尾

撒科打诨 2022-09-23 17:13:29
我有一个来自谷歌电子表格的2D数组,例如:-请注意,2D阵列的长度和宽度可以是任何尺寸。但是,计数将始终以第二个 col1 开头。var ss = SpreadsheetApp.openById('19xxxxxxxxxxxxxxxxxxxxxxxxUOI');var sh=ss.getSheetByName("Sheet2");var lastR = sh.getLastRow()var data = sh.getRange("A4:QC"+lastR).getValues();data阵列看起来像[[alpha,a,a,b,c],[beeta,b,b,a,a],[gama,a,b,c,c],[alpha,d,c,a,a]]现在我想计算每行元素的出现次数,并将公式推送到每列的末尾。result如果我的公式是(a+c)/(b+d)从上面的例子中,结果是(2+1)/(1+0) = 3  //occurrence in 1st row a=2,b=1,c=1,d=0(2+0)/(2+0) = 1  //occurrence in 2nd row a=2,b=2,c=0,d=0(1+2)/(1+0) = 3  //occurrence in 3rd row a=1,b=1,c=2,d=0(2+1)/(0+1) = 3  //occurrence in 4th row a=2,b=0,c=1,d=1现在结果应该在数组的末尾[[alpha,a,a,b,c,3],[beeta,b,b,a,a,1],[gama,a,b,c,c,3],[alpha,d,c,a,a,3]]
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

首先,创建一个计数函数,该函数使用 Array.prototype.reduce 来计算子数组中每个元素的出现次数。然后,创建另一个函数,该函数使用计数结果根据公式计算值,然后将其推送到子数组。最后,将此函数应用于整个数组的每个元素(在本例中,它是就地完成的,但这也可以通过创建新数组并使用 Array.prototype.map 来完成):


const count = (list, els) => {

  const acc = {};

  els.forEach(el => { acc[el] = 0; });

  return list.reduce((acc, curr) => {

    acc[curr]++;

    return acc;

  }, acc);

};


const formula = list => {

  const { a, b, c, d } = count(list, ['a', 'b', 'c', 'd']);

  const x = (a + c) / (b + d);

  list.push(x);

};


const data = [['alpha', 'a', 'a', 'b', 'c'], ['beeta', 'b', 'b', 'a', 'a'], ['gama', 'a', 'b', 'c', 'c'], ['x-ray', 'd', 'c', 'a', 'a']];

data.forEach(formula);

console.log(data);


查看完整回答
反对 回复 2022-09-23
  • 1 回答
  • 0 关注
  • 52 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信