如何在不改变原始数组的情况下过滤嵌套数组?

3
我想要返回内部和外部数组,例如以下内容:[[3],[4],[5]]; 这种方法行不通:
var arr = [[1],[2],[3],[4],[5]];

arr.filter(function(el){
    return el.filter(function(inner){
        return inner >= 3;
    });
});

这种方式也无效:
var arr = [[1],[2],[3],[4],[5]];

arr.map(function(el){
    return el.filter(function(inner){
        return inner >= 3;
    });
});

内部数组始终只有一个元素吗? - Ry-
2个回答

4
你可以使用数组解构来轻松访问回调函数中的内部数组元素:

您可以使用数组解构在回调函数中轻松访问内部数组元素:

const array = [[1],[2],[3],[4],[5]];
const filtered = array.filter(([inner]) => inner >= 3);

console.log(array); // original
console.log(filtered); // filtered


这很完美。谢谢。 - ms81

1

map() 和 filter() 函数不会改变数组,它们返回一个新的包含结果项的数组。

在你展示的代码中,你没有把结果赋值给任何变量,同时,你试图将一个数组与一个数字进行比较:

如果你想要返回其包装数组内的值,可以这样做:

var arr = [[1],[2],[3],[4],[5]];

var newArr = arr.filter(function(inner){
    return inner[0] >= 3;
});

// newArr = [[3], [4], [5]]

如果你只是进行筛选,那么你不需要使用map函数。


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