[英]How can I remove an element from a list, with 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
從obj
對象中刪除條目: {"subTopicId":2, "number":32}
?
或者有沒有一種 javascript 方法來做到這一點?
正如 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});
您現在可以使用_.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)
})
您可以使用removeItemFromArrayByPath函數,其中包括一些 lodash 函數和 splice
/**
* 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.