簡體   English   中英

如何使用 lodash 從列表中刪除元素?

[英]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用於其他用途。 有沒有一種有效的方法可以使用lodashobj對象中刪除條目: {"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});

只需使用香草JS。 您可以使用splice刪除元素:

obj.subTopics.splice(1, 1);

演示

你可以用_pull做到這_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)
})

您可以使用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

最簡單方便的方式——

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

_.without . _.without文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM