javascript - 这个js二位数组怎么过滤里面的空值?不减少数组里面的元素个数
大家讲道理
大家讲道理 2017-04-11 11:24:14
[JavaScript讨论组]
var members = [
    //special
    //0012,0013,0021,0027,0028,0029,0030,0031,0032,0034,0036,0037,0038,
    [
        '0001','0002','0003','0004','0005','0006','0007','0008','0009','0010',
        '0011','0014','0015','0016','0017','0018','0019','0020','0022','0023',
        '0024','0025','0026','0027','0033','0035','0039','0040','','','','','',
        '','','','','','','',
        '0041','0042','0043','0044','0045','0046','0047','0048','0049','0050',
        '0051','0052','0053','0054','0055','0056','0057','0058','0059','0060',
    ],
//One
    [
        '0001','0002','0003','0004','0005','0006','0007','0008','0009','0010',
        '0011','0014','0015','0016','0017','0018','0019','0020','0022','0023',
        '0024','0025','0026','0027','0033','0035','0039','0040','','','','','',
        '','','','','','','',
        '0041','0042','0043','0044','0045','0046','0047','0048','0049','0050',
        '0051','0052','0053','0054','0055','0056','0057','0058','0059','0060',
    ],
    ]

调用的代码:`//创建item小方格

$.each(members, function(index, value){
    if($.inArray(value, customLotteryMembers) >= 0)
    {
        customers.push(index);
    }
    var lm = [];
    $.each(lotteryPrefixes, function(index, value){
        var temp = localStorage.getItem(value+"lotteryMembers");
        if(temp)
        {
            lm = $.merge(lm, temp.split(','));
        }
    });
    var ignoreClassName = '';
    if($.inArray(value, lm) >= 0)
    {
        ignoreClassName = ' ignore';
    }
    $("p.items").append("

"+(++index)+"

"); });`
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
怪我咯
var ans = [];
members.forEach((item, i) => {
    ans[i] = {};
    ans[i].total = item.length;
    ans[i].members = item.filter((n) => n);
});
ringa_lee

members.map(x=>(x.filter(y=>y.length>0)))

黄舟
    var arr = [
            [1, 2, null, undefined, 3, '', 3, '', '', 0, '', '', 4, '', 4, '', 5, '', 6, '', '', '', ''],
            [1, 2, 3],
        ],
        temp = [],
        temp1 = [];
    for (let i of arr[0])
        i && temp.push(i); // copy each non-empty value to the 'temp' array

    for (let i of arr[1])
        i && temp1.push(i); // copy each non-empty value to the 'temp' array


    arr[0] = temp;
    arr[1] = temp1;
    delete temp; // discard the variable
    delete temp1; // discard the variable
    console.log(arr[1]);
  /*
    arr  = [
        [1, 2, 3, 3, 4, 4, 5, 6],
        [1, 2, 3],
    ];
  */
伊谢尔伦

对每个子数组进行过滤操作.

members.map(memberArray => {   // 每个子数组进行映射操作
  return memberArray.filter(element => {   // 映射操作为过滤
    return '' !== element;    // 过滤条件是数组元素非空
  });
});

如果想要总人数不变, 那么多申请一个变量存放总人数即可:

let total = 60;

update: 2017-1-12 18:28:15

为了方便自己理解对题主的调用代码进行了改写, 并且在注释中提出了自己不理解的地方

// 对每个数组还是对所有数组元素进行如下操作?
$.each(members, function (index, value) {
  // 如果value值在customLotteryMembers数组, 在cumtomers中追加index
  // 但是customers的作用是什么? 全局变量?
  // 感觉这样子有点不妥...但是和题目无关, 忽略
  if ($.inArray(value, customLotteryMembers) >= 0) {   
    customers.push(index);
  }

  // 生成lm数组, 但是lm的意思是什么?
  var lm = [];   
  $.each(lotteryPrefixes, function (index, value) {  // lotteryPrefixes存放的是什么东西呢?
    var temp = localStorage.getItem(value+"lotteryMembers");
    if (temp) {
      lm = $.merge(lm, temp.split(','));   // 合并的意图是什么?
    }
  });

  // 如果value在lm数组里找到 那么添加ignoreClassName忽略该值, 但是为什么呢?
  // 那么还是上面所说的lm代表的意思不明确
  var ignoreClassName = '';
  if ($.inArray(value, lm) >= 0) {
    ignoreClassName = ' ignore';
  }

  // 以下的代码使用了ES6标准的模板字符串改写了 
  $("p.items").append(`<p class='item i${index+ignoreClassName} data-index=${index}'>${index+1}</p>`);
});

我个人对这个代码的理解是把members里的所有元素的 (index, value)对 传到函数里面,然后通过lm数组找出应该要忽略的值, 然后这个忽略的值却还是要生成一个小格子, 但是lm的产生代码不太能理解, 所以还是没有搞懂为什么要去掉空字符串却要保留对应的index.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号