[英]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 對象。
您可以收集selectedItems
的ids
,然后過濾掉其中的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.