减少数组数组并从Javascript数据中删除null
我很难通过使用Javascript剥离空值和嵌入数组来“压缩”语法结果。 我正在使用Nearley语法检查器,它可以在句子匹配后运行JS函数。不幸的是,完整解析的结果是一系列数组。下面是一个输出示例减少数组数组并从Javascript数据中删除null,javascript,arrays,Javascript,Arrays,我很难通过使用Javascript剥离空值和嵌入数组来“压缩”语法结果。 我正在使用Nearley语法检查器,它可以在句子匹配后运行JS函数。不幸的是,完整解析的结果是一系列数组。下面是一个输出示例 [ [ [ [ [ [ [ [ 'climb'], [ [ null, 'to' ] ] ], [ [ null, [ 'alt' ] ]
[
[
[
[
[
[
[ [ 'climb'], [ [ null, 'to' ] ] ],
[ [ null, [ 'alt' ] ] ],
[ 332, [ null, [ 'km' ] ] ]
]
],
[ null ]
]
]
]
]
我想删除所有这些null
值,并可能将所有这些数组“压缩”为以下形式:
[
[ 'climb', 'to' ],
[ 'alt', 332, 'km' ]
]
或者类似的东西。我尝试过使用各种
过滤方法,但没有成功。您可以使用相同的方法过滤地图,并将所有数组平坦化
const
filter=array=>array.flatMap(v=>array.isArray(v)
?过滤器(v)
:v==null
? []
:v
),
数组=[[[[[gramb'],[[null',to']],[[null,['alt']],[332[null,['km']]],[null]]],,
结果=过滤器(阵列);
控制台日志(结果)代码>
真的吗?。。那么,
['gramp'、'to'、'alt'、'332'km'怎么样?
彼得·塞利格
太好了。某种逻辑分组会更好,但如果不是
const示例=[[[[
[[
[['爬升'],[[null',到']]],
[[null,['alt']]],
[332,[null,['km']]
]],
[零]
]]]];
功能展开(列表、项目){
if(阵列isArray(项目)){
item=item.reduce(平直,[]);
}
返回列表。concat(项目);
}
常量结果=样本
.减少(平放,[])
.filter(elm=>(elm!=null));//非严格平等
//…以跳过未定义值和空值。
log('result:',result)代码>单线解决方案:
1.转换为字符串2.拆分为平面数组3。删除空值
示例:
var-arr=[
[
[
[
[
[
[['gramb'],[[null',至']]],
[[null,['alt']]],
[332,[null,['km']]
]
],
[零]
]
]
]
];
var res=arr.toString().split(“,”).filter(item=>item);
控制台日志(res)代码>
让resArr=[];
常量findLoc=(arr,loc=[])=>{
arr.map((d,i)=>{
if(数组isArray(d)){
findLoc(d,[…loc,i]);
}否则{
如果(d!==null){
//控制台日志(d,loc);
重新定位推送([…定位,d])
}
}
})
}
常数a=[
[
[
[
[
[
[['爬升'],[[null',到']]],
[[null,['alt']]],
[332,[null,['km']],
[56,[null,null,[[8]]]
]
],
[零]
]
]
]
];
findLoc(a);
让finalIndex=[…resArr.reverse()[0]];
finalIndex.拼接(finalIndex.长度-1,1);
finalIndex=resArr[0].indexOf(Math.max(…finalIndex));
常量finalObj={};
重新分配forEach((d)=>{
finalObj[d[finalIndex]=finalObj[d[finalIndex]]?[…finalObj[d[finalIndex]],d[d.length-1]:[d[d.length-1]]
});
log(Object.values(finalObj));
//[to”,“Gramb”],[alt”],[km”,332],[8,56]
alt发生了什么事?为什么不仅仅是sinlge阵列?你试过什么?对不起。忘了“alt”。单阵列也很好,只是提供了一个选项。添加了alt
输出数组中的'alt'
不应该在自己的行上吗?当然,不管您想生成什么。如果我可以简化它,我就可以更容易地将它放在JSON结构中,这是我的最终目标<代码>爬升
到
可以被视为动词,alt 332 km
可以被视为目标或主体。从目前为止的情况来看,只有[[['gramb','to'],['alt'],[332',km']
是一般工作方法最合乎逻辑的结果。[[['爬升',['爬升',['爬升',332,'公里]]
的编辑输出毫无意义。。。。对于OP的简单语法检查,它只处理字符串、数字和空值,这是最优雅的方法。