В случае упрощенного варианта использования , где порядок предметов, количество предметов, стоимость предметов будут одинаковыми, вы можете попробовать выполнить следующее:
var a = [[1,3], [2,3]];
var b =[1,3];
a = a.filter(v=> v.join() !== b.join());
console.log(a);
Если вы хотите рассмотреть порядок, количество и стоимость, пожалуйста, следуйте
var a = [[1,3], [2,3]];
var b =[1,3];
// Create a map where key is item and value is its occurence
let bObj = b.reduce((ac, c) => Object.assign(ac, {[c]: (ac[c] || 0) + 1}), {});
a = a.filter(v=> {
// For every value, create a copy of bObj
let temp = {...bObj};
// for every value in item, decrements the value by 1
v.forEach(e => temp[e] = (temp[e] || 0) - 1);
// Get all the values of object
let tempValues = Object.values(temp);
// If all values are 0, then it is an exact match, return false else return true
if(new Set(tempValues).size === 1 && tempValues[0] === 0) return false;
return true;
});
console.log(a);
РЕДАКТИРОВАТЬ
var a = [[1,3],[2,3],[3,4],[6,7]];
var b = [[1,3],[2,3]];
// Create a map where key is item and value is its occurence
let bObj = b.map(v => v.reduce((ac, c) => Object.assign(ac, {[c]: (ac[c] || 0) + 1}), {}));
a = a.filter(v=> {
// For every value, create a copy of bObj
let temp = JSON.parse(JSON.stringify(bObj));
// for every value in item, decrements the value by 1
v.forEach(e => temp.forEach(t => t[e] = (t[e] || 0) - 1));
return !temp.some(t => {
// Get all the values of object
let tempValues = Object.values(t);
// If all values are 0, then it is an exact match, return false else return true
return (new Set(tempValues).size === 1 && tempValues[0] === 0)
});
});
console.log(a);