程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参考:大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参:?

开发过程中遇到基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参:的问题如何解决?下面主要结合日常开发的经验,给出你关于基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参:的解决方法建议,希望对你解决基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参:有所启发或帮助;

以下数组只是我需要它如何运行的示例。我已经创建了一个 for 循环来将元素附加到匹配的行,现在我正在尝试删除前一行。

示例数组:

[sally,yes,brown,5],[davID,blue,8],[sally,green,3],no,yellow,7],[ben,purple,12]

期望输出:

[sally,5,3,8,12]

所以,我想让代码做的是:

  1. 检查一个元素是否多次出现在第一列中,但与第 3 列中的值不同。
  2. 当上述情况成立时,将第 (j) 行中的第 2、3 和 4 个元素复制到该元素第一次出现的行。
  3. 删除元素出现的其他行。

我当前用于此循环的代码如下。不知道为什么会出错,但没有得到上述结果。

for (i = 0; i <data.length; i++){
  for (j=0; j<data.length; j++){

    var count = 0;
    if(data[i][0] == data[j][0]){

    count++;

    if (data [i][2] != data[j][2]){

      data[i].push(data[j][1],data[j][2],data[j][3],data[j][4])
      
      if (count > 1){

        data.splice(i-1,1);

      }
      }
      }
    }
    }
  

我可能会以错误的方式解决这个问题,因此如果您建议使用另一种方法来解决它而不是这种 for 循环,那将非常有帮助。比较两个单独的数组而不是将数组与其自身进行比较会更好/更容易吗?

另外,在解决这部分代码后,我需要向所有短于最长的行添加空元素。在上面的示例虚拟数据的情况下,最长的是 10 列长,因此我需要向任何比它短的行添加不同数量的空格。原因是我之后将其粘贴到电子表格中,但不能使用 .SETVALues 方法执行此操作,除非每一行的长度都相同。如果有人也能提供帮助,那也将不胜感激。

解决方法

我相信你的目标如下。

  • 您要实现以下转换。

    • 来自

        [
          ["sally","yes","brown",5],["david","blue",8],["sally","green",3],"no","yellow",7],["ben","purple",12]
        ]
      
    •   [
          ["sally",5,3,8,12]
        ]
      
    • 并且,您希望检索以下值作为使用 SETVALues 放入电子表格的最终值。

        [
          ["sally","",""],12,""]
        ]
      

示例脚本:

在此示例脚本中,为了获得问题中的第一个结果数组,使用了 Map 对象。并且,使用获得的数组,创建使用 serValues 放入电子表格的最终值。

const data = [
  ["sally",12]
];
const ar = [...data.reduce((m,[a,...b]) => m.set(a,m.has(a) ? m.get(a).concat(b) : b),new Map())].map(([a,b]) => [a,...b]);
console.log(JSON.Stringify(ar));

const maxLength = Math.max(...ar.map(e => e.length));
const res = ar.map(e => e.length < maxLength ? e.concat(Array(maxLength - e.length).fill("")) : E);
console.log(JSON.Stringify(res));

  • 在这个示例脚本中,
    • ar 是您在问题中想要的数组。
    • res 是您要与 SETVALues 一起使用的最终值。

    @H_843_19@map
  • reduce()
  • @H_843_19@map()
,
function MyFunc101() {
  const data = [['sally','yes','brown',['david','blue',['sally','green','no','yellow',['ben','purple',12]];
  let oA = [];
  let oObj = { pA: [] };
  data.forEach((R,i) => {
    if (!oObj.hasOwnProperty(R[0])) {
      oObj[R[0]] = [];//create new property array
      oObj[R[0]].push(R);//push entire row in it
      oObj.pA.push(R[0]);//add property to property list
    } else {
      let found = false;//looking to see if colors match any of the current colors in the property array
      oObj[R[0]].forEach(r => {
        if (r[2] == R[2]) {
          found = true;
        }
      });
      if (!found) {
        oObj[R[0]].push(R);//if colors don't match then add it to the property Array
      }
    }
  });
  //creaTing output array from oObj
  oObj.pA.forEach((p,i) => {//loop through each property in the list
    let row=[];
    oObj[p].forEach((r,j) => {//loop through property array
      if (j == 0) {
        row.push(...r);//add the entire first row to row
      } else {
        row = row.concat(r.slice(1));//add the last 3 elements for the remaining items on the property array
        //row.push(...r.slice(1));//this works too
      }
    });
    oA.push(row);//push results in output array
  });
  Logger.log(JSON.Stringify(oA));
  return oA;
}

Execution log
7:21:03 PM  Notice  Execution started
7:21:05 PM  Info    [["sally",12]]
7:21:04 PM  Notice  Execution completed

大佬总结

以上是大佬教程为你收集整理的基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参考:全部内容,希望文章能够帮你解决基于匹配的 Javascript Apps 脚本从 2D 数组中删除行 示例脚本:参考:所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。