如何使用lodash从列表中删除元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用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
过滤旧数组并将其分配给同一对象来创建新数组,如下所示
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;
});
另一答案
lodash和打字稿
const clearSubTopics = _.filter(obj.subTopics, topic => (!_.isEqual(topic.subTopicId, 2)));
console.log(clearSubTopics);
另一答案
这是带有数组的简单lodash函数,并用索引号删除它。
index_tobe_delete = 1
fruit = [{a: "apple"}, {b: "banana"}, {c: "choco"}]
_.filter(fruit, (value, key)=> {
return (key !== index_tobe_delete)
})
以上是关于如何使用lodash从列表中删除元素?的主要内容,如果未能解决你的问题,请参考以下文章