如何使用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,以便进行其他操作。有没有一种有效的方法来使用lodashobj对象中删除条目:{"subTopicId":2, "number":32}

或者有没有一种JavaScript方法可以做到这一点?

368499 次浏览

只需使用香草JS.可以使用splice删除元素:

obj.subTopics.splice(1, 1);

演示

正如lyyons在评论中指出的那样,更习惯的、更符合lodashy的做法是使用_.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});

您可以使用_pull来执行此操作。

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

检查提及

除@TheFourTheYe答案外,使用谓词代替传统的匿名函数:

  _.remove(obj.subTopics, (currentObject) => {
return currentObject.subTopicId === stToDelete;
});

或者

obj.subTopics = _.filter(obj.subTopics, (currentObject) => {
return currentObject.subTopicId !== stToDelete;
});

现在,您可以使用_。拒绝,它允许您根据需要删除的内容(而不是需要保留的内容)进行筛选。

与只能在阵列上工作的_.pull_.remove不同,._reject可以在任何Collection上工作

obj.subTopics = _.reject(obj.subTopics, (o) => {
return o.number >= 32;
});

洛达什和打字稿

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)
})

据我所知,有四种方法。

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

回答:做个记录,以便我以后能找到。

您可以使用RemoveItemFromArrayByPath函数,其中包括一些lodash函数和拼接

/**
* Remove item from array by given path and index
*
* Note: this function mutates array.
*
* @param {Object|Array} data (object or array)
* @param {Array|String} The array path to remove given index
* @param {Number} index to be removed from given data by path
*
* @returns {undefined}
*/


const removeItemFromArrayByPath = (data, arrayPath, indexToRemove) => {
const array = _.get(data, arrayPath, []);
if (!_.isEmpty(array)) {
array.splice(indexToRemove, 1);
}
};

您可以在此处查看示例: https://codepen.io/fatihturgut/pen/NWbxLNv

最简单最方便的方法-

_.without([2, 1, 2, 3], 1, 2);
// => [3]

_.without文档。