首页 > 解决方案 > 如何删除数组不同对象中的相似键

问题描述

所以我有一个包含多个对象的对象数组,我想从对象中删除日期键,即 createdDate 和 modifiedDate

我尝试使用 for 循环并使用删除功能,但没有任何反应。

 var data = matchScoreData.tbl_FallOfWicket;
 matchScoreData.tbl_FallOfWicket.forEach(element => {
    if (matchScoreData.tbl_FallOfWicket.hasOwnProperty("createdDate")) {
                  delete ["createdDate"];
    }
 });
 console.table(data);

 var matchScoreData = {
    "tbl_FallOfWicket": [
                {
                  "pk_fallWicketID": 119,
                  "fk_matchID": 133137,
                  "fk_teamID": 141065,
                  "fk_dismissTypeID": 3,
                  "fk_dismissPlayerID": 969155,
                  "run": 40,
                  "wicket": 1,
                  "over": "5.1",
                  "inning": 1,
                  "createdDate": "2018-08-18T03:06:12+0000",
                  "modifiedDate": "",
                },
                {
                  "pk_fallWicketID": 120,
                  "fk_matchID": 133137,
                  "fk_teamID": 141065,
                  "fk_dismissTypeID": 1,
                  "fk_dismissPlayerID": 939721,
                  "run": 88,
                  "wicket": 2,
                  "over": "9.5",
                  "createdDate": "2018-08-18T03:06:12+0000",
                  "modifiedDate": "",
                  "inning": 1
       }
    ]};

我在输出中得到相同的值

标签: javascriptarraysjson

解决方案


您的问题是您正在使用delete["createdDate"]它,它应该是delete element["createdDate"]它可以从迭代中删除正确的属性element

matchScoreData.tbl_FallOfWicket.forEach(element => {
  if (element.hasOwnProperty("createdDate")) {
    delete element["createdDate"];
  }
});

笔记:

您的代码的另一个更大问题是

if (matchScoreData.tbl_FallOfWicket.hasOwnProperty("createdDate"))

matchScoreData.tbl_FallOfWicket是一个数组,因此此条件将始终返回 false。因此delete['...']永远不会被执行。

您将不得不检查单个对象。

if (element.hasOwnProperty("createdDate"))

演示:

var matchScoreData = {
  "tbl_FallOfWicket": [{
      "pk_fallWicketID": 119,
      "fk_matchID": 133137,
      "fk_teamID": 141065,
      "fk_dismissTypeID": 3,
      "fk_dismissPlayerID": 969155,
      "run": 40,
      "wicket": 1,
      "over": "5.1",
      "inning": 1,
      "createdDate": "2018-08-18T03:06:12+0000",
      "modifiedDate": "",
    },
    {
      "pk_fallWicketID": 120,
      "fk_matchID": 133137,
      "fk_teamID": 141065,
      "fk_dismissTypeID": 1,
      "fk_dismissPlayerID": 939721,
      "run": 88,
      "wicket": 2,
      "over": "9.5",
      "createdDate": "2018-08-18T03:06:12+0000",
      "modifiedDate": "",
      "inning": 1
    }
  ]
};

var data = matchScoreData.tbl_FallOfWicket;
matchScoreData.tbl_FallOfWicket.forEach(element => {
  if (element.hasOwnProperty("createdDate")) {
    delete element["createdDate"];
  }
});
console.log(data);


推荐阅读