我很难通过去掉空值和使用Javascript嵌入数组来“压缩”语法的结果。我正在使用Nearley语法检查器,它可以在句子匹配后运行JS函数。不幸的是,您作为一系列数组获得了完整解析的结果。以下是输出的示例
[
[
[
[
[
[
[ [ 'climb'], [ [ null, 'to' ] ] ],
[ [ null, [ 'alt' ] ] ],
[ 332, [ null, [ 'km' ] ] ]
]
],
[ null ]
]
]
]
]我希望删除所有这些null值,并可能将所有这些数组“压缩”为某种形式:
[
[ 'climb', 'to' ],
[ 'alt', 332, 'km' ]
]或者类似的东西。我尝试过使用各种filter方法,但都没有成功。
发布于 2020-11-30 18:57:51
您可以使用相同的方法过滤一个映射,并将所有数组都平面化。
const
filter = array => array.flatMap(v => Array.isArray(v)
? filter(v)
: v === null
? []
: v
),
array = [[[[[[[['climb'], [[null, 'to']]], [[null, ['alt']]], [332, [null, ['km']]]]], [null]]]]],
result = filter(array);
console.log(result);
甚至更短的方法
const
filter = array => array
.flat(Infinity)
.filter(v => v !== null),
array = [[[[[[[['climb'], [[null, 'to']]], [[null, ['alt']]], [332, [null, ['km']]]]], [null]]]]],
result = filter(array);
console.log(result);
发布于 2020-11-30 18:58:30
真的吗..。那
['climb', 'to', 'alt', 332, 'km']呢?-彼得·塞利格,太棒了。某种逻辑分组会更好,但是如果不是.
..。
const sample = [[[[
[[
[ [ 'climb'], [ [ null, 'to' ] ] ],
[ [ null, [ 'alt' ] ] ],
[ 332, [ null, [ 'km' ] ] ]
]],
[ null ]
]]]];
function flatOut(list, item) {
if (Array.isArray(item)) {
item = item.reduce(flatOut, []);
}
return list.concat(item);
}
const result = sample
.reduce(flatOut, [])
.filter(elm => (elm != null)); // non strict equality
//...in order to skip both values, undefined and null.
console.log('result :', result);
发布于 2020-11-30 19:21:16
一行解决方案:
1.转换为string 2. 2.Split转换为平面数组3.删除空值
示例:
var arr = [
[
[
[
[
[
[['climb'], [[null, 'to']]],
[[null, ['alt']]],
[332, [null, ['km']]]
]
],
[null]
]
]
]
];
var res = arr.toString().split(",").filter(item => item);
console.log(res);
https://stackoverflow.com/questions/65078970
复制相似问题