javascript 数组遍历删除的问题

以下是一个多维数组,如何遍历后,删除item且lists为空的的数组后,得到一个新数组?

            var arr = [{
                id: 1,
                name: 1,
                item: [11,12,13,14],
                lists:[17,18,18]
            },{
                id: 2,
                name: 2,
                item: [],
                lists:[]
            },{
                id: 3,
                name: 3,
                item: [13,15,16,17,18],
                lists:[]
            },{
                id: 4,
                name: 4,
                item: [],
                lists:[]
            },{
                id: 5,
                name: 5,
                item: [13,15,16,17,18],
                lists:[5,1,2,3]
            }];

希望得到的新数组是:

        var arr = [{
            id: 1,
            name: 1,
            item: [11,12,13,14],
            lists:[17,18,18]
        },{
            id: 3,
            name: 3,
            item: [13,15,16,17,18],
            lists:[]
        },,{
            id: 5,
            name: 5,
            item: [13,15,16,17,18],
            lists:[5,1,2,3]
        }];
阅读 3.5k
5 个回答
arr.forEach((item, i) => {
    if(item.item.length === 0 && item.lists.length === 0) {
        arr.splice(i, 1)
    }
})
var newArr = arr.filter(function(item) {
    return (
      typeof item.item === 'array' && item.item.length > 0 &&
      typeof item.lists === 'array' && item.lists.length > 0
    );
});

如果是es6的话,可以更简洁

let newArr = arr.filter(o => (o.item.length || o.lists.length));
function(arr){
    var newArr = [];
    arr.map(function(obj){
        if(obj.item.length != 0){
             newArr.push({
             id:obj.id,
             name:obj.name,
             item:obj.item,
             lists:obj.lists
             });   
        }
    });
    return newArr;
}

刚开机也来练练手
clipboard.png

推荐问题