删除Javascript中的空子数组

时间:2019-07-06 17:46:23

标签: javascript arrays filter

我有这样的东西

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()来做到这一点,但我无法获得正确的表达方式。

6 个答案:

答案 0 :(得分:2)

 const result = array.map(it => it.filter(_ => true)).filter(sub => sub.length)

首先,从内部数组中删除所有空插槽,然后删除所有长度为0的数组。

答案 1 :(得分:2)

使用filtersome

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