亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算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 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號