这是我做的功能。 var myArray
是一个名称列表。我无法从此数组中获取唯一值并将其设置为另一个工作表。我只想要名字一次。
function array() {
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet().getSheetByName("test");
var destinationSheet = app.getActiveSpreadsheet().getSheetByName("test2");
var myArray = ss.getRange(2,1,30).getValues();
destinationSheet.getRange(2, 1, 30).setValues(myArray);
}
有人可以帮我过滤这个数组吗?
答案 0 :(得分:1)
添加到@JPV 的答案中,这几乎是完美的,但没有考虑“ab”跟在“abc”之后的情况。在这种情况下,代码不会将“ab”识别为新实例。为此,您需要将代码更改为以下内容:
function countDistinct() {
var sh = SpreadsheetApp.getActive();
var ss = sh.getSheetByName('Sheet1');
var length = ss.getLastRow()
var data = ss.getRange(1,1,length,1).getValues();
var a = [];
var b = 0;
for (var n = 0; n<length; n++) {
if (a.indexOf(data[n].join()) == -1) {
a.push(data[n].join());
b++;
}
}
Logger.log(a);
Logger.log(b);
}
变量 b 会给你唯一值的数量,而变量 a 只会打印数组。
答案 1 :(得分:0)
Javascript Arrays使用方法from
,您可以使用该方法从一组值创建数组,无论是String
,Map
还是Set
。
在代码
中定义myArray
之后添加此内容
myArray = Array.from(new Set(myArray));
您可以详细了解here。
或强>
您可以使用简单的forEach
循环来过滤唯一值。
假设您的数组仅包含名称,并且getValues
返回2-D数组,那么,您的数组看起来像 - [['name1', 'name2', 'name3']]
。
var newArray = [];
myArray.forEach(function(x){
if(newArray.indexOf(x[0]) === -1){
newArray.push(x[0]);
}
});
答案 2 :(得分:0)
这是另一种方法(针对Google Script)
function myArray() {
var ss, s, a;
ss = SpreadsheetApp.getActive();
s = ss.getSheetByName("test").getRange(2, 1, 30).getValues();
a = [];
a.push(s[0]);
for (var n = 1; n < s.length; n++) {
if (a.join().indexOf(s[n].join()) == -1) {
a.push(s[n])
};
}
ss.getSheetByName("test2").getRange(2, 1, a.length, a[0].length).setValues(a);
}