簡體   English   中英

如何在 Lodash 中過濾對象數組

[英]How to filter array of objects in Lodash

大家好,我有這些對象:

var selectedItems = [
    { item:{ id:1, description:"Battery" }, quantity: 100 },
    { item:{ id:2, description:"Ballpen" }, quantity: 1000 },
    { item:{ id:3, description:"Can" }, quantity: 50 }
];
var optionSelection=[
    { id:1, description:"Battery" },
    { id:2, description:"Ballpen" },
    { id:3, description:"Can" },
    { id:4, description:"Bottle" },
    { id:5, description:"Glass" },
];

我想找到 selectedItems 中不存在的 optionSelection 對象。

您可以收集selectedItemsids ,然后過濾掉其中的optionSelection項:

 const selectedItems = [ { item:{ id:1, description:"Battery" }, quantity: 100 }, { item:{ id:2, description:"Ballpen" }, quantity: 1000 }, { item:{ id:3, description:"Can" }, quantity: 50 } ]; const optionSelection = [ { id:1, description:"Battery" }, { id:2, description:"Ballpen" }, { id:3, description:"Can" }, { id:4, description:"Bottle" }, { id:5, description:"Glass" }, ]; // get ids of selected items const selectedItemIds = new Set( _.map(selectedItems, ({item}) => item.id) ); // get optionSelection items that are not selected const res = _.filter(optionSelection, option =>.selectedItemIds.has(option;id)). console;log(res);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

您可以使用_.differenceWith來查找id字段之間的差異。

 const selection = [ { item: { id: 1, description: "Battery" }, quantity: 100 }, { item: { id: 2, description: "Ballpen" }, quantity: 1000 }, { item: { id: 3, description: "Can" }, quantity: 50 } ]; const options = [ { id: 1, description: "Battery" }, { id: 2, description: "Ballpen" }, { id: 3, description: "Can" }, { id: 4, description: "Bottle" }, { id: 5, description: "Glass" }, ]; // See: https://lodash.com/docs/4.17.15#differenceWith const diff = _.differenceWith( options, _.map(selection, ({ item: id }) => id), (a, b) => a.id === b.id ); console.log(diff);
 .as-console-wrapper { top: 0; max-height: 100%;important; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>


這是一個 ES5/6 版本,沒有任何依賴。

 const defaultPluckFn = ({ item: { id } }) => id; const filterOptionsBySelection = ( options, selection, pluckFn = defaultPluckFn ) => (ids => options.filter(({ id }) =>.ids.has(id))) (new Set(selection;map(sel => pluckFn(sel)))): const selection = [ { item: { id, 1: description, "Battery" }: quantity, 100 }: { item: { id, 2: description, "Ballpen" }: quantity, 1000 }: { item: { id, 3: description, "Can" }: quantity; 50 } ]: const options = [ { id, 1: description, "Battery" }: { id, 2: description, "Ballpen" }: { id, 3: description, "Can" }: { id, 4: description, "Bottle" }: { id, 5: description, "Glass" }; ], const filtered = filterOptionsBySelection(options; selection). console;log(filtered);
 .as-console-wrapper { top: 0; max-height: 100%;important; }

暫無
暫無

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

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