因此,我试图删除此JSON中的所有空/空/空格/未定义的空格,但是我被卡住了。这是我到目前为止的代码:

<!DOCTYPE html>
<html>
<head>
    <title>
        JSON Example
    </title>
</head>

<style type="text/css">

body {
  padding: 20px;
  font-family: Helvetica;
}

</style>

<body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript">


var data = {
  "first_name": "Sick",
  "last_name": "Nick",
  "email": "sick,nicke@address.com",
  "gender": null,
  "invitations": [
    {
      "from": "",
      "code": null
    }
  ],
  "company": {
    "name": "",
    "industries": []
  },
  "address": {
    "city": "Minnesota",
    "state": "MN",
    "zip": "14221",
    "street": " "
  }
};



//eliminate all the null values from the data
function clean(obj) {
  var clone = JSON.parse(JSON.stringify(obj))
  console.log("The clone is: "+clone);
  for (var propName in obj) {
    var toRemove = obj[propName];
    if (toRemove === null || toRemove === [] || toRemove === {} || toRemove === "" || toRemove === " ") {
      obj.splice(obj.indexOf(propName),1);
    }
  }
    return obj;
}

clean(data);


</script>
  <p>"The value is: "<span id="data"></span></p>

</body>
</html>


如您所见,我为此编写了一个初步函数,但是我不太完全理解这个想法。谁能向正确的方向指点我?

最佳答案

如果您必须进行大量清理,为什么还要首先使用JSON.parse(JSON.sringify(data))呢?这种构造的目的不是要有一种快速简便的方法来进行深层克隆而无需自己遍历对象吗?但是您必须清理您的克隆。

看一下这个:



var data = {
  "first_name": "Sick",
  "last_name": "Nick",
  "email": "sick,nicke@address.com",
  "gender": null,
  "invitations": [{
    "from": "",
    "code": null
  }],
  "company": {
    "name": "",
    "industries": []
  },
  "address": {
    "city": "Minnesota",
    "state": "MN",
    "zip": "14221",
    "street": " "
  }
};

function clone(value) {
  if (typeof value === "object") {
    let _clone;
    if (Array.isArray(value)) {
      for(let v of value){
        let w = clone(v);
        if(w !== undefined){
          _clone || (_clone = []);
          _clone.push(w);
        }
      }
    } else if (value !== null) {
      for (let key of Object.keys(value)) {
        let w = clone(value[key]);
        if (w !== undefined) {
          _clone || (_clone = {});
          _clone[key] = w;
        }
      }
    }

    return _clone;
  }

  if (typeof value === "string") {
    return value.trim() ?
      value :
      undefined;
  }

  return value;
}

console.log(clone(data));

.as-console-wrapper{top:0;max-height:100%!important}

10-05 20:48
查看更多