过滤数组中的子数组

Posted

技术标签:

【中文标题】过滤数组中的子数组【英文标题】:Filter subarrays in an array 【发布时间】:2017-02-14 09:25:57 【问题描述】:

我一定是疯了。假设我有一个数组数组。我想过滤子数组并最终得到一个过滤子数组的数组。假设我的过滤器“大于 3”。所以

let nested = [[1,2],[3,4],[5,6]]
 // [[],[4][5,6]]

在一些下划线 jiggery-pokery 失败后,我尝试了常规的 for 循环。

for (var i = 0; i < nested.length; i++)
  for (var j = 0; j < nested[i].length; j++)
    if (nested[i][j] <= 3)
      (nested[i]).splice(j, 1)
    
  

但这只会从第一个子数组中删除 1。我会认为 splice 会改变底层数组,并且长度将被更新以解决这个问题,但也许不是?或者也许其他事情完全出错了。可能很明显;没有看到它。任何花哨或简单的帮助都将欣然接受。

【问题讨论】:

nested.map(arr =&gt; arr.filter(x=&gt; x &lt;= 3)) 另外,更具体地说,你的实现失败了,因为当你 splice 数组 减少 但你仍然从同一个位置循环 谢谢。就是这样。 【参考方案1】:

这可能会做到;

var nested = [[1,2],[3,4],[5,6]],
     limit = 3,
    result = nested.map(a => a.filter(e => e > limit ));
console.log(result);

【讨论】:

@vlaz 的评论可能重复 @HappyCoding 我不这么认为。【参考方案2】:

如果你没有 ES6:

var nested = [[1,2],[3,4],[5,6]];

nested.map(
  function(x) 
    return x.filter(
      function(y)
        return y > 3
      
    )
  
)

【讨论】:

以上是关于过滤数组中的子数组的主要内容,如果未能解决你的问题,请参考以下文章

如何匹配 MongoDB 中的子文档数组?

Arrays and -contains - 测试数组元素中的子字符串

如何匹配MongoDB中的子文档数组?

嵌套过滤器:$filter 数组,然后是 $filter 子数组

在 Mongoose/MongoDB 的文档中过滤数组、子文档、数组、文档

获取数组中每个索引的子文档元素计数并更新子文档键 - 数组中的子文档(IN MONGODB)