大家好,我有这个对象:
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" },
];
我想让optionSelection不在selectedItems中。
您可以使用_.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; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句