我怎样才能从列表中删除一个元素,用lodash?

我有一个像这样的对象:

var obj = { "objectiveDetailId": 285, "objectiveId": 29, "number": 1, "text": "x", "subTopics": [{ "subTopicId": 1, "number": 1 }, { "subTopicId": 2, "number": 32 }, { "subTopicId": 3, "number": 22 }] } var stToDelete = 2; 

我在我的应用程序中使用了_lodash来处理其他事情。 有没有一种有效的方法来使用_lodash删除条目: {"subTopicId":2, "number":32}obj对象或有一种JavaScript的方式来做到这一点?

正如Lyyons在评论中指出的那样,更习惯性和方便的做法是使用_.remove ,像这样

 _.remove(obj.subTopics, { subTopicId: stToDelete }); 

除此之外,您可以传递一个谓词函数,其结果将用于确定是否要删除当前元素。

 _.remove(obj.subTopics, function(currentObject) { return currentObject.subTopicId === stToDelete; }); 

或者,您可以通过使用_.filter过滤旧数组并将其分配给同一对象来创build新数组,如下所示

 obj.subTopics = _.filter(obj.subTopics, function(currentObject) { return currentObject.subTopicId === stToDelete; }); 

要么

 obj.subTopics = _.filter(obj.subTopics, {subTopicId: stToDelete}); 

只要使用香草JS。 您可以使用splice删除元素:

 obj.subTopics.splice(1, 1); 

演示

你可以用_pull做。

 _.pull(obj["subTopics"] , {"subTopicId":2, "number":32}); 

检查参考

你现在可以使用_.reject ,它允许你根据你需要去掉的东西进行过滤,而不是你需要保留的东西。

不像_.pull_.remove只适用于数组, ._reject正在处理任何Collection

 obj.subTopics = _.reject(obj.subTopics, (o) => { return o.number >= 32; }); 

除了@thefourtheye答案,使用谓词,而不是传统的匿名函数:

  _.remove(obj.subTopics, (currentObject) => { return currentObject.subTopicId === stToDelete; }); 

要么

 obj.subTopics = _.filter(obj.subTopics, (currentObject) => { return currentObject.subTopicId === stToDelete; });