如何过滤数组数组?

d4r*_*4rk 3 arrays filter multidimensional-array google-apps-script

我有这个 2D 数据数组(我们称之为变量arr),它代表一个包含各种字段的表:

     [1]   [2]   [3]   [4]   
[1],Fruit,Apple,Red,10  
[2],Fruit,Apple,Green,20  
[3],Berry,Strawberries,Red,5  
[4],Tuber,Potato,Yellow,2  
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我需要按第arr3 列 = Red过滤变量(我不想在所有表中搜索 Red,仅在第 3 列中)获得:

    [1]   [2]   [3]   [4]   
[1],Fruit,Apple,Red,10  
[2],Berry,Strawberries,Red,5 
Run Code Online (Sandbox Code Playgroud)

如何将 .filter 函数应用于二维数组以过滤单个字段/列?

gsc*_*gsc 5

ECMAScript 6

let filtered = arr.filter(dataRow => dataRow[2] === 'Red');
Run Code Online (Sandbox Code Playgroud)

正如@ozeebee 所指出的,Google App Scripts 目前不支持 ES6,因此您应该尝试以下操作:

ECMAScript 5

var filtered = arr.filter(function (dataRow) {
  return dataRow[2] === 'Red';
});
Run Code Online (Sandbox Code Playgroud)

在评论中,“经典方式”指的是 ES5 方法。

解释

.filterfunction 接受一个参数,该参数是一个函数的回调,该函数返回true是否应保留数组条目或false是否应删除数组条目,这就是过滤。在这种情况下,我们应该检查表行的第三列是否等于Red。代码:return dataRow[2] === 'Red'等于:

if (dataRow[2] === 'Red') {
  return true;
} else {
  return false;
}
Run Code Online (Sandbox Code Playgroud)

因为比较的结果是一个布尔值。

也可以看看

  • 请注意,第一种形式“现代方式”不适用于 GAS 脚本,因为它(尚)不支持 javascript ES6 语法。GAS 脚本被编译为 Java 代码并在 Google 服务器上运行。 (3认同)