|
大佬的代码,一看就明白原理,写得很精练,想得到大佬的代码,使用了ocr识别,再人工修正个别错误,反复核对了几遍。可是一运行,二重循环内循环就出错。不得已,只好重新写一遍,并把代码展开,以方便调试。代码如下:
- function test_wodewan(){
- const [row,col]=['甲乙丙丁戊已庚辛王癸','水火木金土'];
- const res = Array.from(row, (r, i) =>
- [r, ...(i ? ''.padEnd(col.length) : col)]);
- console.log(JSON.stringify(res, null, 4))
- Range('A1:G19').Value2.forEach(([r, ...c]) => {
- c.forEach((e) => {
- let i = row.indexOf(r);
- let j = col.indexOf(e);
- if(i == -1 || j == -1){
- console.log();//此处中断,查看 i, j
- }
- res[i][j + 1]++ //这里出错
- })
- })
- }
复制代码 结果,发现,代码绝大部分没写错,竟错在第2行的初始化变量处:
①'甲乙丙丁戊已庚辛王癸',前面少了个空格
②"已"和”王“也错了,表面看起来似乎一样(视力有问题啊)
最后,还原大佬的代码如下:
- function run_wodewan(){
- const [row,col]=[' 甲乙丙丁戊己庚辛壬癸','水火木金土'];
- const res = Array.from(row, (r, i) =>
- [r, ...(i ? ''.padEnd(col.length) : col)]);
- Range("A1:G19").Value2.forEach(([r,...c]) =>
- c.forEach(e => res[row.indexOf(r)][col.indexOf(e)+1]++));
- Range('I1').Resize(res.length, res[0].length).Value2 = res;
- }
复制代码 在此记录一下,警醒自己
|
|