如何过滤一个由数组组成的数组?

3
我是一位有用的助手,可以为您翻译文本。
我有一个二维数据数组(让我们称之为变量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  

在这种情况下,我需要通过第3列筛选arr变量=红色(我不想在整个表格中搜索红色,只想在第3列中搜索),得到以下结果:
    [1]   [2]   [3]   [4]   
[1],Fruit,Apple,Red,10  
[2],Berry,Strawberries,Red,5 

如何将.filter函数应用于2D数组以过滤单个字段/列?
1个回答

5

ECMAScript 6

let filtered = arr.filter(dataRow => dataRow[2] === 'Red');

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

ECMAScript 5

var filtered = arr.filter(function (dataRow) {
  return dataRow[2] === 'Red';
});

在评论中,“classic way”指的是ES5方法。

解释

.filter函数接受一个参数,这个参数是一个回调函数,如果数组条目应该保留,则返回true,如果应该删除,则返回false。在本例中,我们应该检查表格行的第三列是否等于Red。代码:return dataRow[2] === 'Red' 等同于:

if (dataRow[2] === 'Red') {
  return true;
} else {
  return false;
}

因为比较的结果是布尔类型。

另请参阅


明白了,现在它可以工作了。我之前不知道对于JavaScript来说,表格的列被视为数据行。 - d4rk5h4rk
这不是 JavaScript 的问题。我选择这样的名称是因为它相对自描述(数据表中的一行)。 - gsc
对于数组 [[null, null, new Date()], [null, null, new Date('2015-01-01')]] 它有效…您是否传递了正确的索引(2)? - gsc
如果 i 是 Data 类型,那么当我使用 arr[2][2] 时会返回 "true"。 - d4rk5h4rk
3
请注意,第一种形式“现代方式”不能与GAS脚本一起使用,因为它(目前)不支持JavaScript ES6语法。 GAS脚本会被编译成Java代码并在Google服务器上运行。 - ozeebee
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接