过滤数组中的子数组
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 => arr.filter(x=> x <= 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
)
)
【讨论】:
以上是关于过滤数组中的子数组的主要内容,如果未能解决你的问题,请参考以下文章
Arrays and -contains - 测试数组元素中的子字符串
嵌套过滤器:$filter 数组,然后是 $filter 子数组