我怎样才能从列表中删除一个元素,用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; });