【问题标题】:Delete null values on an Array删除数组上的空值
【发布时间】:2016-08-14 04:03:05
【问题描述】:

我想用 JSON 发送一个对象,我用一个 for 循环迭代这个对象。我发送的 JSON 是正确的,但问题是数组中有空值。我认为它与myValue.children[index]= item; 相关联 我尝试了 .filter() 方法,但它没有解决我的问题,因为返回的数组是空的。我也尝试了一个条件,但我只检测到 4 个值。 这是我收到的 JSON:

{
  "name":"object",
  "children":[
    {
      "name":"myName",
      "children":[
        {
          "name":"aNumber",
          "size":12345
        }
      ]
    },
    null,
    null,
    null,
    {
      "name":"myName",
      "children":[
        {
          "name":"aNumber",
          "size":12345
        }
      ]
    },
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    null,
    {
      "name":"myName",
      "children":[
        {
          "name":"aNumber",
          "size":12345
        }
      ]
    },
    {
      "name":"myName",
      "children":[
        {
          "name":"aNumber",
          "size":12345
        }
      ]
    }
  ]
}

这是我的代码:

function myFunction(index, tabItem , callback){
    var result = '';
    var myValue = {};
    var childrenTicket = [];
    myValue.name = "object";
    myValue.children = childrenTicket;
    for (index in tabItem) {
        try{
            var currentItem = tabItem[index];
            var Object =currentItem.issuelinks.issuelinktype.outwardlinks.issuelink;
            for(var SeveralObject in Object) {
                var item = {};
                var specificObject = Object[SeveralObject]; 
                var main = specificObject._;
                var id = specificObject.$.id;
                var descriptionObject = {};
                descriptionObject.name = id;
                descriptionObject.size = 12345;
                item.name = main;
                if (myValue.children[index] == undefined){
                    console.log('undefined detected'); 
                }
                myValue.children[index]= item;
                //result = result + (myValue);
                item.children = [descriptionObject];
                sendJson(myValue);
                callback(result);
            }
        } catch(ignored){
        }
    } return result;
}

希望你能帮助我。

【问题讨论】:

    标签: arrays json node.js for-loop isnullorempty


    【解决方案1】:

    试试这样的:

    for (var i in obj) {
      if (obj[i] === null || obj[i] === undefined) {
        delete obj[i];
      }
    }
    

    obj 是您的 JSON 对象。

    【讨论】:

    • 我已经在itemTicket.children[index] 上尝试过,但它不起作用,你认为我在好对象上使用它吗?
    • 您需要将整个 JSON 对象作为 obj 传递。
    • 我在我的 JSON 文件上使用它,但结果完全相同 for (var i in itemTicket) { if (itemTicket[i] === null || itemTicket[i] === undefined) { delete itemTicket[i]; } } sendJson(itemTicket);
    【解决方案2】:

    您可以使用underscore 模块并使用它的compact 方法。

    链接:http://underscorejs.org/#compact

    【讨论】:

    • 我在 itemTicket 上使用它,但作为 .filter(),返回一个 emtpy 数组...var newChild = _.compact(itemTicket); sendJson(newChild);
    • 你如何使用它?我刚刚用你的 JSON 测试了它,它工作得很好
    • 我在 itemTicket 上使用它,我创建了一个新变量并发送了这个新变量。
    • 我像var ticket = your JSON; ticket.children = _.compact(ticket.children)一样使用它
    • 我有一个空数组:var ticket = itemTicket; ticket.children = _.compact(ticket.children); sendJson(ticket);
    【解决方案3】:

    你可以像这样删除空值

        for (var ite in ObjJson)
                {
                    if(ObjJson[ite]==null)
                    {
                    console.log('ys null');
                    delete ObjJson[ite];
                    } 
                }
    

    【讨论】:

    • 同样的问题,我在发送之前使用它并删除任何空值:for (var ite in itemTicket) { if(itemTicket[ite]==null) { console.log('ys null') delete itemTicket[ite]; } } sendJson(itemTicket);
    【解决方案4】:

    尝试使用 underscore.js

    _.compact(array)
    

    它将删除所有 null、false、未定义等值。

    使用 underscore.js 比自己编写循环或其他东西的优势是 underscore.js 函数将比您的循环更快,出错的机会也会更少。

    【讨论】:

    • 我非常怀疑下划线的循环会比你自己编写的更快。为什么这么说?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多