首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少数组并从Javascript数据中删除null

减少数组并从Javascript数据中删除null
EN

Stack Overflow用户
提问于 2020-11-30 18:14:12
回答 4查看 284关注 0票数 2

我很难通过去掉空值和使用Javascript嵌入数组来“压缩”语法的结果。我正在使用Nearley语法检查器,它可以在句子匹配后运行JS函数。不幸的是,您作为一系列数组获得了完整解析的结果。以下是输出的示例

代码语言:javascript
复制
[
   [
      [
         [
            [
               [
                  [ [ 'climb'], [ [ null, 'to' ] ] ],
                  [ [ null, [ 'alt' ] ] ],
                  [ 332, [ null, [ 'km' ] ] ]
               ]
            ],
            [ null ]
         ]
      ]
   ]
]

我希望删除所有这些null值,并可能将所有这些数组“压缩”为某种形式:

代码语言:javascript
复制
[
   [ 'climb', 'to' ],
   [ 'alt', 332, 'km' ]
]

或者类似的东西。我尝试过使用各种filter方法,但都没有成功。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-11-30 18:57:51

您可以使用相同的方法过滤一个映射,并将所有数组都平面化。

代码语言:javascript
复制
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);

甚至更短的方法

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2020-11-30 18:58:30

真的吗..。那['climb', 'to', 'alt', 332, 'km']呢?-彼得·塞利格,太棒了。某种逻辑分组会更好,但是如果不是.

..。

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2020-11-30 19:21:16

一行解决方案:

1.转换为string 2. 2.Split转换为平面数组3.删除空值

示例:

代码语言:javascript
复制
var arr = [
    [
        [
            [
                [
                    [
                        [['climb'], [[null, 'to']]],
                        [[null, ['alt']]],
                        [332, [null, ['km']]]
                    ]
                ],
                [null]
            ]
        ]
    ]
];



var res = arr.toString().split(",").filter(item => item);


console.log(res);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65078970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档