Sam*_*tar 152 javascript arrays object 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;
Run Code Online (Sandbox Code Playgroud)
我lodash在我的应用程序中安装了其他东西.是否有一种有效的方法来lodash删除条目:{"subTopicId":2, "number":32}从obj对象?
或者有一种javascript方式来做到这一点?
the*_*eye 234
正如lyyons在评论中指出的那样,更多惯用和lodashy的方法是使用_.remove,像这样
_.remove(obj.subTopics, {
subTopicId: stToDelete
});
Run Code Online (Sandbox Code Playgroud)
除此之外,您可以传递谓词函数,其结果将用于确定是否必须删除当前元素.
_.remove(obj.subTopics, function(currentObject) {
return currentObject.subTopicId === stToDelete;
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过过滤旧数组_.filter并将其分配给同一对象来创建新数组,如下所示
obj.subTopics = _.filter(obj.subTopics, function(currentObject) {
return currentObject.subTopicId !== stToDelete;
});
Run Code Online (Sandbox Code Playgroud)
要么
obj.subTopics = _.filter(obj.subTopics, {subTopicId: stToKeep});
Run Code Online (Sandbox Code Playgroud)
And*_*ndy 29
只需使用香草JS.您可以使用splice删除元素:
obj.subTopics.splice(1, 1);
Run Code Online (Sandbox Code Playgroud)
sem*_*gay 21
你可以做到_pull.
_.pull(obj["subTopics"] , {"subTopicId":2, "number":32});
Run Code Online (Sandbox Code Playgroud)
检查参考
小智 18
最简单、最方便的方法——
_.without([2, 1, 2, 3], 1, 2);
// => [3]
Run Code Online (Sandbox Code Playgroud)
_.without文档。
Xel*_*tor 16
您现在可以使用_.reject,它允许您根据需要进行过滤,而不是您需要保留的内容.
不同于_.pull或者_.remove仅适用于数组,._reject正在研究任何 数组Collection
obj.subTopics = _.reject(obj.subTopics, (o) => {
return o.number >= 32;
});
Run Code Online (Sandbox Code Playgroud)
据我所知,有四种方法可以做到这一点
const array = [{id:1,name:'Jim'},{id:2,name:'Parker'}];
const toDelete = 1;
Run Code Online (Sandbox Code Playgroud)
首先:
_.reject(array, {id:toDelete})
Run Code Online (Sandbox Code Playgroud)
第二个是:
_.remove(array, {id:toDelete})
Run Code Online (Sandbox Code Playgroud)
通过这种方式,数组将发生变异。
第三个是:
_.differenceBy(array,[{id:toDelete}],'id')
// If you can get remove item
// _.differenceWith(array,[removeItem])
Run Code Online (Sandbox Code Playgroud)
最后一个是:
_.filter(array,({id})=>id!==toDelete)
Run Code Online (Sandbox Code Playgroud)
我在学习 lodash
回答做个记录,方便以后找。