Javascript 如果数组中的所有元素都不是值(NaN、null、未定义),如何删除该行?

Javascript 如果数组中的所有元素都不是值(NaN、null、未定义),如何删除该行?,javascript,arrays,Javascript,Arrays,请告诉我,如果2D数组中的每一个元素都不是值,如何删除整行。如果为NaN,则删除;如果为null,则删除;如果未定义,则删除……等等。。。。如果行中至少有一个元素是数字、字符串、布尔值或任何有意义的值,则将此行中的每个元素保留在原位 例如,在此数组中: var数组=[]; 数组[0]=[]; 数组[1]=[]; 数组[2]=[]; 数组[0][1]=标题; 数组[0][2]=NaN; 数组[0][3]=3; 数组[1][0]=0; 数组[1][1]=未定义; 数组[1][2]=null; 数组

请告诉我,如果2D数组中的每一个元素都不是值,如何删除整行。如果为NaN,则删除;如果为null,则删除;如果未定义,则删除……等等。。。。如果行中至少有一个元素是数字、字符串、布尔值或任何有意义的值,则将此行中的每个元素保留在原位

例如,在此数组中:

var数组=[]; 数组[0]=[]; 数组[1]=[]; 数组[2]=[]; 数组[0][1]=标题; 数组[0][2]=NaN; 数组[0][3]=3; 数组[1][0]=0; 数组[1][1]=未定义; 数组[1][2]=null; 数组[1][3]=3; 数组[2][0]=标题; 数组[2][1]=1; 数组[2][2]=未定义; 数组[2][3]=url; console.logarray;
检查所有列,检查其中一列是否为NaN或null,然后筛选该行。

要删除列主二维数组中的行,最容易的方法是先透视,然后再透视。过滤器非常简单:

row => !row.every(v => v == null || isNaN(v))))
但pivot有点不那么直观:

var pivot = a => a[0].map((_, i) => a.map(b => b[i]))
我们假设2d阵列不是锯齿状的,因此[0]的长度应该与其他子阵列的长度相同。然后映射它,并使用index参数将外部数组映射到每个内部数组的第i个元素

完整代码如下:

变量数组=[ [未定义的“标题”,NaN,3], [0,未定义,null,3], ['title',1,未定义,'url'] ]; var pivot=a=>a[0]。映射,i=>a.mapb=>b[i] var=pivotarray var filtered=rotated.filterrow=>!row.everyv=>v==null | | isNaNv var result=pivotfiltered
logresult您可以先获取列,然后拼接阵列

变量数组=[ [,title,NaN,3], [0,未定义,null,3], [标题,1,未定义,url] ], 索引=数组 .reducer,a=>{ a、 forEachv,i=>r[i]=r[i]| |!isNaNv&&v!==null; 返回r; }, [] .reduceRightr,v,i=>v | | r.pushi,r,[]; array.forEacha=>index.forEachi=>a.i,1; 控制台。登录; console.logarray;
.作为控制台包装{最大高度:100%!重要;顶部:0;}请显示您已尝试的内容。这里的目标是帮助您编写代码,而不是免费编写代码service@charlietfl. 你是对的。我尝试了这个array2=array.mapsubarray=>subarray.filterl=>el!=无效的但我不知道如何包含Nan和undefined。是否应该包含undefined?您在问题中写道…然后保留此行中的每个元素的位置…,但在最终输出中,您实际上是在删除并移动元素。这是矛盾的。@trincot请注意,您答案中的输入与此代码中的输入不同。您忘记了[0][0]中的隐式未定义,正在删除的行是[…][2]或NaN,null,未定义。谢谢,但不幸的是@jooms-yup无法正常工作,修复了它。是的,我猜海报混淆了问题中的行和列。如果是,这是正确的解决方案。pivot在JS循环中通常被称为zip…@georg我一直认为zip和我一样,可能太习惯python了,在python中它有很多东西,并且经常被滥用来转置矩阵。在字面意义上,zip实际上是关于两件事。。。是的,你说得有道理。喜欢它,尤其是这部分r,v,i=>v | | r.pushi,r.@Nina Scholz,你能解释一下这东西是怎么工作的吗?哪一个?“还原,还原右还是forEach?”尼娜·斯科尔斯,我理解还原,还原右和forEach。但是我不能完全理解r[I]=r[I]| |!isNaNv&&v!==无效的返回r;如您所见,它从一个未定义的项r[i]开始,对于不需要的项保持为false,对于相同索引(即数组的列)中需要的项保持为true。结果是这个给定数据的数组[true,true,false,true],它表示应该保留哪一列。
var pivot = a => a[0].map((_, i) => a.map(b => b[i]))