我有这样的东西
var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]
我需要过滤它并得到这样的结果:
var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[1,1]]
我尝试用array.filter()
来做到这一点,但我无法获得正确的表达方式。
答案 0 :(得分:2)
const result = array.map(it => it.filter(_ => true)).filter(sub => sub.length)
首先,从内部数组中删除所有空插槽,然后删除所有长度为0的数组。
答案 1 :(得分:2)
使用filter
和some
let a = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]
let final = a.filter(val=> val.some(v => true))
console.log(final)
答案 2 :(得分:1)
另一种替代方法是使用reduce和一些。
const data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]];
const filteredData = data.reduce((accumulator, currentValue) => {
if(currentValue.some(x => x)){
accumulator.push(currentValue);
}
return accumulator;
}, []);
console.log(filteredData);
答案 3 :(得分:0)
这是一个双重过滤的情况:(和最短的代码);)
var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]
var R = data.filter(r=>r.filter(x=>x).length)
console.log( JSON.stringify(R) )
答案 4 :(得分:0)
这里有一个更具说明性的示例。希望对您有所帮助:
isArrayEmpty(arr)
,该函数返回一个布尔值,如果数组为空,则返回true。要更深入地检测数组(不只是falsy
)中的空值,请参见此stackoverflow thread。另请参阅彼得的评论。data
,排除空的子数组。
var data = [[1,2,34,4,5,6],[3,34,5,3,42,4],[,,,,,],[,,,],[,,,,,],[1,1]]
var isArrayEmpty = arr => !arr.filter(elem => true).length;
var result = data.filter(subarray => !isArrayEmpty(subarray))
console.log(result)
答案 5 :(得分:0)
let arr = [[1],[1,2],[,2],[,,],,[]]
console.log(JSON.stringify( arr.filter(a => 0 in a) ))
console.log(JSON.stringify( arr.filter(a => Object.keys(a).length) )) // to include sparse subarrays