删除Javascript中的空子数组

删除Javascript中的空子数组,javascript,arrays,filter,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执行此操作,但无法获得正确的表达式 const result = array.map(it => it.filter(_ => true)).fil

我有这样一个目标

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执行此操作,但无法获得正确的表达式

 const result = array.map(it => it.filter(_ => true)).filter(sub => sub.length)
首先,从内部阵列中删除所有空插槽,然后删除所有长度为0的阵列

首先,从内部阵列中移除所有空插槽,然后移除所有长度为0的阵列。

使用过滤器和一些

设a=[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,,,,,,,,,[,,,,,,,,,,,,,[1,1]] 让final=a.filterval=>val.somev=>true console.logfinal使用过滤器和一些

设a=[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,,,,,,,,,[,,,,,,,,,,,,,[1,1]] 让final=a.filterval=>val.somev=>true
console.logfinal它是一个双过滤器的情况:和最短的代码

var数据=[[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,,[,,,,,,,,,[,,,,,,,,,,,,]和[1,1]] var R=data.filterr=>R.filterx=>x.length
console.log JSON.stringifyR它是一个双过滤器案例:并且是最短的代码

var数据=[[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,,[,,,,,,,,,[,,,,,,,,,,,,]和[1,1]] var R=data.filterr=>R.filterx=>x.length
console.log JSON.stringifyR这里有一个更具声明性的示例。希望有帮助:

创建一个函数isArrayEmptyarr,该函数返回一个布尔值,如果数组为空,则该布尔值为true。要更深入地检测数组中的空值,而不仅仅是falsy,请参见以下内容。另见彼得的评论。 使用此函数,过滤不包括空子阵列的数据。 var数据=[[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,,[,,,,,,,,,[,,,,,,,,,,,,]和[1,1]] var isArrayEmpty=arr=>!arr.filterelem=>true.length; var result=data.filtersubarray=>!isArrayEmptysubarray
logresult这里有一个更具声明性的示例。希望有帮助:

创建一个函数isArrayEmptyarr,该函数返回一个布尔值,如果数组为空,则该布尔值为true。要更深入地检测数组中的空值,而不仅仅是falsy,请参见以下内容。另见彼得的评论。 使用此函数,过滤不包括空子阵列的数据。 var数据=[[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,,[,,,,,,,,,[,,,,,,,,,,,,]和[1,1]] var isArrayEmpty=arr=>!arr.filterelem=>true.length; var result=data.filtersubarray=>!isArrayEmptysubarray 控制台。日志结果 设arr=[[1],[1,2],[2],,,,],[] console.logJSON.stringify arr.filtera=>0 console.logJSON.stringify arr.filtera=>Object.keysa.length//以包含稀疏子阵列 设arr=[[1],[1,2],[2],,,,],[] console.logJSON.stringify arr.filtera=>0
console.logJSON.stringify arr.filtera=>Object.keysa.length//包含稀疏子阵列另一种选择是使用reduce和一些

常数数据=[[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,[,,,,,,,[,,,,,,,,]和[1,1]; 常量filteredData=data.reduceacumerator,currentValue=>{ ifcurrentValue.somex=>x{ 累加器。电流值; } 回流蓄能器; }, [];
console.logfilteredData 另一种选择是使用reduce和一些

常数数据=[[1,2,34,4,5,6],[3,34,5,3,42,4],,,,,[,,,,,,,[,,,,,,,,]和[1,1]; 常量filteredData=data.reduceacumerator,currentValue=>{ ifcurrentValue.somex=>x{ 累加器。电流值; } 回流蓄能器; }, [];
console.logfilteredData;对象使用花括号,如下所示:var data={…}@rpivovar数组也是对象:对象使用花括号,如下所示:var data={…}@rpivovar数组也是对象:您可以安全地删除长度>0部分匹配您可以简单地使用数据。filterr=>r.filterx=>x.length您可以安全地删除长度>0部分匹配您可以简单地使用数据。filterr=>r.filterx=>x.length。。。isArrayEmpty的实施可能会被重新考虑。。。将您的isArrayEmpty[,,未定义,,,,,]与此方法进行比较。。。函数ISEMPTYARREARR{return!arr.someo=>true;}。。。和isEmptyArray[,,未定义,,,,]。。。请参阅上面我给@code maniac的2美分的答案。。。。isArrayEmpty的实施可能会被重新考虑。。。将您的isArrayEmpty[,,未定义,,,,,]与此方法进行比较。。。函数ISEMPTYARREARR{return!arr.someo=>true;}。。。和isEmptyArray[,,未定义,,,,]。。。请看我的2美分,上面的代码是MANIAC的答案。我会把这个标记为最有用的答案,因为它的方法适用于两种边缘情况。完全空数组和部分稀疏数组也会被压缩成非稀疏数组。我将把这个标记为最有用的答案,因为它的方法适用于两个边缘情况,完全空数组和部分稀疏数组,这也会被压缩成非稀疏数组。空数组的测试不正确。它只是意外地适用于给定的示例。。。[,,,,]everyv=>v==未定义。由于定义的给定数组文本是一个完全稀疏的数组,因此为空,因此它根本不会被迭代。。。但是,方法every by definition还返回任何空数组的真值,而不运行其提供的回调函数,甚至不运行一次。比较[,,,],everyv=>{console.logv;返回v===un
已定义;}对于b[,,未定义,,,].everyv=>{console.logv;return v===undefined;}…2/2…a根本不记录,因为它处理的是一个完全稀疏的数组,但b会记录,因为操作的数组不是完全稀疏的。由于回调函数提供了错误的条件,因此对空数组的测试确实失败了。。。毕竟,[、未定义、、]不是空数组。它在索引2处显式地保存一个未定义的值。。。[、、未定义、、]中的2为true,而对于介于0和4之间的任何其他索引为false。因此,对真实阵列空性的有效测试应该基于以下几点:。。。e、 g.:函数isEmptyArrayarr{return!arr.someo=>true;}@PeterSeliger感谢您提供的信息mate:,不知道,修复了1/2。。。空数组的测试不正确。它只是意外地适用于给定的示例。。。[,,,,]everyv=>v==未定义。由于定义的给定数组文本是一个完全稀疏的数组,因此为空,因此它根本不会被迭代。。。但是,方法every by definition还返回任何空数组的真值,而不运行其提供的回调函数,甚至不运行一次。比较a[,,,,].everyv=>{console.logv;return v===undefined;}与b[,,undefined,,,,,]之间的差异。everyv=>{console.logv;return v===undefined;}…2/2…a根本不记录日志,因为它处理的是一个完全稀疏的数组,但b会记录日志,因为操作的数组不是完全稀疏的。由于回调函数提供了错误的条件,因此对空数组的测试确实失败了。。。毕竟,[、未定义、、]不是空数组。它在索引2处显式地保存一个未定义的值。。。[、、未定义、、]中的2为true,而对于介于0和4之间的任何其他索引为false。因此,对真实阵列空性的有效测试应该基于以下几点:。。。e、 g.:函数isEmptyArrayarr{return!arr.someo=>true;}@PeterSeliger感谢您提供的信息mate:,不知道,已修复