如何使用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);

Demo

另一答案

你可以用_pull做到这一点。

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

检查reference

另一答案

你现在可以使用_.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从列表中删除元素?的主要内容,如果未能解决你的问题,请参考以下文章

结束一个片段

30 段 Python 实用代码

从列表视图中删除一行后刷新片段

如果使用我的服务使用Java 8 lambda / streams列表不为空,如何从列表中删除每个元素

即学即用的 30 段 Python 实用代码

如何使用 lodash _.filter() 过滤 Firestore 集合?