在多个条件下从javascript中的嵌套对象数组中删除数组

时间:2017-06-15 11:19:58

标签: javascript arrays

days[
    {
      dt:2017-06-19T00:00:00.000Z,
      id:1,
      releases:[],
    },

    {
      dt:2017-06-20T00:00:00.000Z,
      id:2,
      releases:[{
               id:41,
               programId:2,
               teamId:116,
            }]
    },
    {
      dt:2017-06-21T00:00:00.000Z,
      id:3,
      releases:[]
    },
]

我想删除id为41 AND day.id为2的版本。所以我的数组应该是这样的:

days[
    {
      dt:2017-06-19T00:00:00.000Z,
      id:1,
      releases:[],
    },

    {
      dt:2017-06-20T00:00:00.000Z,
      id:2,
      releases:[]
    },
    {
      dt:2017-06-21T00:00:00.000Z,
      id:3,
      releases:[]
    },
]

我试图过滤:

var found = days.filter(function(day){
           return day.releases.filter(function(r){
                          return r.id===41
            });
 });

然后获取索引并从那里删除但我知道有一个更简单的方法来做到这一点..任何人都可以帮忙吗?嵌套版本对象数组中可以有多个版本,因此我需要通过查看版本ID和日期ID来专门删除。

2 个答案:

答案 0 :(得分:1)

您可以迭代days并仅过滤具有所需id的版本。

var days = [{ dt: '2017-06-19T00:00:00.000Z', id: 1, releases: [], }, { dt: '2017-06-20T00:00:00.000Z', id: 2, releases: [{ id: 41, programId: 2, teamId: 116, }] }, { dt: '2017-06-21T00:00:00.000Z', id: 3, releases: [] }];

days.forEach(function (day) {
    if (day.id === 2) {
        day.releases = day.releases.filter(function (release) {
            return release.id !== 41;
        });
    }
});

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

答案 1 :(得分:1)

您希望使用.map javascript原型函数来实现此目的 -

var days = [
    {
      dt:'2017-06-19T00:00:00.000Z',
      id:1,
      releases:[],
    },

    {
      dt:'2017-06-20T00:00:00.000Z',
      id:2,
      releases:[{
               id:41,
               programId:2,
               teamId:116
            }]
    },
    {
      dt:'2017-06-21T00:00:00.000Z',
      id:3,
      releases:[]
    }
];

days = days.map(function(object){
      if (object.id === 2){
            object.releases = object.releases.filter(function (item) {
                return item.id !== 41
            });
      }
      return object;
});

console.log(days);