【问题标题】:Removing undefined from an Array that contains square brackets从包含方括号的数组中删除未定义
【发布时间】:2020-07-06 00:32:47
【问题描述】:

您可以在下面看到我正在处理的数组。最终我想删除重复的方括号,但现在我只是想删除数组第 2 行上的 undefined。我试过了许多方法,似乎无法过滤掉,可能是由于额外的方括号吗?任何见解都会很棒!

服务器端数组

[
  [ '["windows","osx","linux"]' ],
  [ undefined ],
  [ '["windows","osx"]' ],
  [ '["windows"]' ],
  [ '["windows","osx","android"]' ],
  [ '["windows","linux"]' ],
  [ '["windows","osx","linux","android"]' ],
  [ '["web"]' ],
  [ '["windows","linux","android"]' ],
  [ '["windows","android"]' ],
  [ '["android"]' ],
  [ '["osx"]' ]
]

代码

    // filter out duplicates
    function arrUnique(arr) {
        var cleaned = [];
        platform.forEach(function(itm) {
            var unique = true;
            cleaned.forEach(function(itm2) {
                if (_.isEqual(itm, itm2)) unique = false;
            });
            if (unique)  cleaned.push(itm);
        });
        return cleaned;
    }
    
    var duplicateRemoval = arrUnique(platform);
    var filteredOut = duplicateRemoval.filter(e => e != null);
    console.log(filteredOut);

【问题讨论】:

  • 数组从何而来?你最好从它的源头修复它
  • 我也喜欢! @LelioFaieta 但不幸的是它来自我从itch.io/bundle/520/games.json 提取的 json,我无法控制它。
  • 如果你尝试对它使用一次 json.parse 会发生什么?
  • 这只是另一个数组。 if ( <length of the array === 1> && <the only element is undefined> ) then remove that element(推测为 .filter().reduce()

标签: javascript node.js arrays


【解决方案1】:

要删除undefined,您可以使用过滤器。 (如果数组有更多未定义的元素,则使用 some 或 every 方法相应地更改过滤器。

const data = [
  ['["windows","osx","linux"]'],
  [undefined],
  ['["windows","osx"]'],
  ['["windows"]'],
  ['["windows","osx","android"]'],
  ['["windows","linux"]'],
  ['["windows","osx","linux","android"]'],
  ['["web"]'],
  ['["windows","linux","android"]'],
  ['["windows","android"]'],
  ['["android"]'],
  ['["osx"]'],
];

const res = data.filter(([item]) => item);

console.log(res);

【讨论】:

    【解决方案2】:

    要删除 undefined 项目,您可以使用以下代码之一
    如果

    1. 你不想改变主要的data,可以使用find方法。

    .

    var data = [
      [ '["windows","osx","linux"]' ],
      [ undefined ],
      [ '["windows","osx"]' ],
      [ '["windows"]' ],
      [ '["windows","osx","android"]' ],
      [ '["windows","linux"]' ],
      [ '["windows","osx","linux","android"]' ],
      [ '["web"]' ],
      [ '["windows","linux","android"]' ],
      [ '["windows","android"]' ],
      [ '["android"]' ],
      [ '["osx"]' ]
    ]
    
    var res = data.filter( item => Array.isArray(item) && item.length > 0 && item[0] !== undefined)
    

    此代码更改了data 并删除了undefined

    var i = 0
    while( i< data.length){
      if(Array.isArray(data[i]) && data[i].length > 0 && data[i][0] !== undefined) {
        i++;
      } else {
        data.splice(i , 1)
      }
    }
    

    【讨论】:

    • 谢谢!我不知道这件事。这非常有帮助!
    • Array.isArray() 是不必要的,因为data 的所有元素都是数组。这是一种非常复杂的方法(见 sivakos 回答)
    • 这将有助于保护方法免受意外数据的影响。如果您确定数据可以删除它
    猜你喜欢
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多