在条件下删除子对象项

时间:2018-01-04 09:55:43

标签: javascript

我有这个功能来获取列表对象 列表对象中的每个条目都包含一个列出项目的对象 其中一项是名为not_visible的密钥。 我想从列表对象中删除该项条目。 我曾经想过要像贝娄那样做,但是因为value而无法在子forEach中访问。 我已经包含了一个列表对象的片段。

任何指导将不胜感激。

getListsObjectByNameItemVisibility: function() {
    var lists =  listsObjectByName(this);
    Object.entries(lists).forEach(
        ([key, value]) => {
            Object.entries(value['list_items']).forEach(
                ([subKey, subValue]) => {
                    if(subValue['not_visible'] === false){                              
                    }
                }
            );              
        }
    );
    return list;
},

enter image description here

2 个答案:

答案 0 :(得分:1)

也许这是一个更好的解决方案,但这就是我会这样做,只是搜索删除的内容,然后删除(在Javascript中删除idk但在同一列表中删除for循环中的项目通常会变坏)< / p>

itemsToRemove = []

lists.list_items.forEach(function(item, index) {
    if(!item.not_visible) {
        itemsToRemove.push(item);
    }
});

itemsToRemove.forEach(function(item, index) {
    const itemIndex = lists.list_items.indexOf(item);
    lists.list_items.splice(itemIndex, 1);
});

答案 1 :(得分:0)

这是我的解决方案。
对于lists对象中的每个条目,
如果该项目包含项目的子列表,则向后循环并检查 能见度属性。
如果属性为true,则从对象中删除。

并返回不包含隐藏项的对象。

getListsObjectByNameItemVisability: function() {
    var lists =  listsObjectByName(this);
    Object.entries(lists).forEach(
        ([key, value]) => {

            for( var i = value.list_items.length-1; i >= 0; i-- ) {
                if(value.list_items[i]['not_visible']){
                    delete value.list_items[i];
                }
            }

        }
    );
    return lists;
},