Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从包含方括号的数组中删除未定义的_Javascript_Node.js_Arrays - Fatal编程技术网

Javascript 从包含方括号的数组中删除未定义的

Javascript 从包含方括号的数组中删除未定义的,javascript,node.js,arrays,Javascript,Node.js,Arrays,下面你可以看到我正在处理的数组。最终我想删除重复的方括号,但现在我只是尝试删除数组第2行的未定义的。我尝试了许多方法,但似乎无法过滤掉,这可能是由于额外的方括号吗?任何洞察都会很棒 服务器端阵列 代码 // filter out duplicates function arrUnique(arr) { var cleaned = []; platform.forEach(function(itm) { var unique

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

服务器端阵列

代码

    // 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);

要删除
未定义的
项,可以使用以下代码之一
如果

  • 如果不想更改主
    数据
    ,可以使用
    查找
    方法
  • 此代码更改
    数据
    并删除
    未定义的

    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)
      }
    }
    
    var i=0
    而(i0&&data[i][0]!==未定义){
    i++;
    }否则{
    数据拼接(i,1)
    }
    }
    
    要删除未定义的
    ,只需使用过滤器即可。 (如果数组中有更多未定义的元素,则使用某些或每个方法相应地更改筛选器)

    const数据=[
    ['[“windows”、“osx”、“linux”],
    [未定义],
    ['[“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);
    数组来自何处?你最好从它的源代码处修复它,我也很乐意!@LelioFaieta但不幸的是,它来自一个我正在提取的json,我无法控制它。如果你尝试对它使用一次json.parse会发生什么?那只是另一个数组。
    如果(&&&&&)然后删除该元素
    (可以用
    .filter()
    .reduce()
    谢谢!我不知道这一点。这非常有用!
    Array.isArray()
    是不必要的,因为
    数据的所有元素都是数组。这是一种非常复杂的方法(参见sivakos的回答)这将有助于保护方法不受意外数据的影响。如果确定数据,可以将其删除
    
    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)
    
    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)
      }
    }