如何使用lodash从列表中删除元素?

2020/10/24 22:21 · javascript ·  · 0评论

我有一个看起来像这样的对象:

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在评论中所指出的那样,更惯用和lo琐的方法是使用_.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: stToKeep});

只需使用香草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;
});

据我所知,有四种方法可以做到这一点

const array = [{id:1,name:'Jim'},{id:2,name:'Parker'}];
const toDelete = 1;

首先:

_.reject(array, {id:toDelete})

第二个是:

_.remove(array, {id:toDelete})

这样,数组将被突变。

第三个是:

_.differenceBy(array,[{id:toDelete}],'id')
// If you can get remove item 
// _.differenceWith(array,[removeItem])

最后一个是:

_.filter(array,({id})=>id!==toDelete)

我在学习 lodash

回答以作记录,以便以后找到。

除了@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)
})
本文地址:http://javascript.askforanswer.com/ruheshiyonglodashcongliebiaozhongshanchuyuansu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!