如何使用下划线JS从嵌套数组中删除对象

How to delete an object from the nested Array using underscore JS

我有嵌套数组,需要根据条件删除对象。

数组:

grouplist: [
    {
        name: "one",
        optionlist: [
            {
                optionitem: "green"
            },
            {
                optionitem: "red"
            }
        ]
    },
    {
        name: "two",
        optionlist: [
            {
                optionitem: "yellow"
            },
            {
                optionitem: "red"
            },
            {
                optionitem: "blue"
            }
        ]
    },
    {
        name: "three",
        optionlist: [
            {
                optionitem: "green"
            }
        ]
    },
    {
        name: "four",
        optionlist: [
            {
                optionitem: "blue"
            },
            {
                optionitem: "red"
            }
        ]
    }
];

如果 optionItem 颜色是绿色,那么我需要将它从我的数组对象中完全删除。

这是我试过的。

var returnedData = _.filter(grouplist, function(n) { 
    return _.some(n.optionlist, function(option){ 
        return option.optionitem!= "green";
    });
});
var returnedData = _.filter(grouplist, function(n){ 
  var containsGreen = _.some(n.optionlist, function(option){ 
    return option.optionitem === "green";
  })
  return !containsGreen;
});

filter_.filter 的问题是您正在创建一个 new 数组。如果你想简单地从现有数组中删除一个对象而不创建一个新对象,这里有一个简单的普通 JS 方法,用相同数量的代码行就可以做到这一点:

for (var i = 0, l = grouplist.length; i < l; i++) {
  var foundGreen = grouplist[i].optionlist.some(function (el) {
      return el.optionitem === 'green'; 
  });
  if (foundGreen) grouplist.splice(i, 1); i--; l--;
}

DEMO

var returnedData = _.reject(grouplist, function(n){ 
  return _.some(n.optionlist, function(option){ 
    return option.optionitem === "green";
  });
});