大佬教程收集整理的这篇文章主要介绍了基于匹配的 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]
所以,我想让代码做的是:
我当前用于此循环的代码如下。不知道为什么会出错,但没有得到上述结果。
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 方法执行此操作,除非每一行的长度都相同。如果有人也能提供帮助,那也将不胜感激。
我相信你的目标如下。
您要实现以下转换。
在此示例脚本中,为了获得问题中的第一个结果数组,使用了 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
一起使用的最终值。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,请注明来意。